使用 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)]
如何在列表理解中执行以下操作?
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)]