如何在列表推导中执行以下操作?
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
答案 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)
返回:
filter
构造函数将list()
函数包装在上面。答案 2 :(得分:0)
我在 for 循环之后添加了 if 语句,它适用于我的用例。
data = [a for a in source_list if (your_condition)]