【发布时间】:2021-05-04 17:50:56
【问题描述】:
考虑一个列表列表,如下所示:
my_list = [[0,"zero"], [0,"zero 2x"], [1,"one"], [2,"two"]]
根据第一个值获取子集的最有效方法是什么?我想得到:
zero_list = ["zero", "zero 2x"]
当然可以迭代整个列表,但是有几千个值似乎效率低。
zero_list = []
for i in my_list:
if i[0] == 0:
zero_list.append(i[1])
有没有更有效的方法? lambda 表达式可以做到这一点吗?
【问题讨论】:
-
为什么不使用列表推导?例如。
zero_list = [j for i, j in my_list if i == 0] -
my_list是否按第一个元素排序? -
@DocDriven 列表推导通常并不比常规循环更有效——它只是在循环中构建列表时的语法糖。
-
@PranavHosangadi 我知道这一点,但对于这个简单的案例,它是最快且最易读的解决方案。
-
@PranavHosangadi 我同意你的观点,这可能会给人一种错误的印象。我想说的是两种解决方案之间的差异可以忽略不计,列表组合在这种情况下更具可读性。
标签: python-3.x list