比方说,我有一个多维列表L:滤镜阵列,以显示与特定值排在一个特定的列
l = [['a', 1],['b', 2],['c', 3],['a', 4]]
,我想返回只由该行有“A”在另一份名单他们的第一个列表元素:
m = [['a', 1],['a', 4]]
这样做的好方法和有效方法是什么?
比方说,我有一个多维列表L:滤镜阵列,以显示与特定值排在一个特定的列
l = [['a', 1],['b', 2],['c', 3],['a', 4]]
,我想返回只由该行有“A”在另一份名单他们的第一个列表元素:
m = [['a', 1],['a', 4]]
这样做的好方法和有效方法是什么?
绝对是一个列表理解的情况下:
m = [row for row in l if 'a' in row[0]]
在这里,我把你的“有‘A’在第一要素”的字面,何处使用in
运营商。如果你想限制这“有‘A’为第一要素”(一个非常不同的事情与您实际写的 - - !),然后
m = [row for row in l if 'a' == row[0]]
是更喜欢它;-)。
m = [i for i in l if i[0] == 'a']
出了什么问题只是:
m = [i for i in l if i[0] == 'a']
或者:
m = filter(lambda x: x[0] == 'a', l)
我怀疑这两者之间的差异将会是明显的性能。使用最方便的方式。我不喜欢lambda
s,但filter
可以用itertools.ifilter
代替较大的列表(如果这是个问题),但是您也可以将列表理解更改为生成器(将[]
更改为()
)以获得相同的一般结果。除此之外,它们可能完全相同。
[i for i in l if i[0]=='a']
btw,看看Python的list comprehension with conditions。