筛选数组以显示特定列中具有特定值的行

时间:2010-01-14 05:32:44

标签: python list

假设我有一个多维列表l:

l = [['a', 1],['b', 2],['c', 3],['a', 4]]

我希望返回另一个列表,其中只包含第一个列表元素中包含“a”的行:

m = [['a', 1],['a', 4]]

这样做有什么好方法?

5 个答案:

答案 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)

使用filter功能:

m = filter(lambda x: x[0] == 'a', l)

或作为列表理解:

m = [x for x in l where x[0] == 'a']

答案 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