用else传递列表理解

时间:2015-11-13 11:18:49

标签: python python-2.7 list-comprehension

如何在列表推导中执行以下操作?

test = [["abc", 1],["bca",2]]

result = []
for x in test:
    if x[0] =='abc':
        result.append(x)
    else:
        pass
result
Out[125]: [['abc', 1]]

尝试1:

[x if (x[0] == 'abc') else pass for x in test]
  File "<ipython-input-127-d0bbe1907880>", line 1
    [x if (x[0] == 'abc') else pass for x in test]
                                  ^
SyntaxError: invalid syntax

尝试2:

[x if (x[0] == 'abc') else None for x in test]
Out[126]: [['abc', 1], None]

尝试3:

[x if (x[0] == 'abc') for x in test]
  File "<ipython-input-122-a114a293661f>", line 1
    [x if (x[0] == 'abc') for x in test]
                            ^
SyntaxError: invalid syntax

3 个答案:

答案 0 :(得分:26)

if需要在最后,您不需要列表理解中的pass。只有在满足if条件时才会添加该项,否则该元素将被忽略,因此pass将在列表推导语法中隐式实现。

[x for x in test if x[0] == 'abc']

为完整起见,此声明的输出为:

[['abc', 1]]

答案 1 :(得分:5)

作为雅各答案的补充;很高兴知道filter命令,因为你基本上想要的是过滤一个列表:

filter( lambda x: x[0]=='abc', test)

返回:

  • Python 2中的列表
  • Python3中的生成器(对于很长的列表可能很有用,因为您以后可以处理结果而不会使内存负担过重);如果您仍然需要列表,只需使用filter构造函数将list()函数包装在上面。

答案 2 :(得分:0)

我在 for 循环之后添加了 if 语句,它适用于我的用例。

data = [a for a in source_list if (your_condition)]