假设我有一个多维列表l:
l = [['a', 1],['b', 2],['c', 3],['a', 4]]
我希望返回另一个列表,其中只包含第一个列表元素中包含“a”的行:
m = [['a', 1],['a', 4]]
这样做有什么好方法?
答案 0 :(得分:15)
绝对是列表理解的一个案例:
m = [row for row in l if 'a' in row[0]]
在这里,我从字面上看你的“拥有' 第一个元素”,从而使用in
运算符。如果你想把它限制为“拥有' as 第一个元素”(与你实际写的东西完全不同!),那么
m = [row for row in l if 'a' == row[0]]
更喜欢它; - )。
答案 1 :(得分:1)
m = [i for i in l if i[0] == 'a']
答案 2 :(得分:0)
答案 3 :(得分:0)
只是有什么问题:
m = [i for i in l if i[0] == 'a']
或者:
m = filter(lambda x: x[0] == 'a', l)
我怀疑这些之间的差异将是显着的性能。使用最方便的。我不喜欢lambda
,但filter
可以替换为itertools.ifilter
以获取较大的列表(如果这是一个问题),但您也可以将列表理解更改为生成器(更改[]
到()
)以获得相同的一般结果。除此之外,它们可能完全相同。
答案 4 :(得分:0)
[i for i in l if i[0]=='a']
顺便说一下,看看Python的list comprehension with conditions。