使用 else pass 的列表理解

List comprehension with else pass

如何在列表理解中执行以下操作?

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

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

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

为了完整起见,此语句的输出为:

[['abc', 1]]

作为对 Jaco 回答的补充;很高兴了解 filter 命令,因为您基本上想要的是 过滤 列表:

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

哪个returns:

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

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

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