用else传递列表理解

Woo*_*per 14 python list-comprehension python-2.7

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

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

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

试试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
Run Code Online (Sandbox Code Playgroud)

试试2:

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

尝试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
Run Code Online (Sandbox Code Playgroud)

Ale*_*lex 31

if需求是在年底,你不需要pass在列表理解.只有if满足条件才会添加该项,否则将忽略该元素,因此pass在列表推导语法中隐式实现.

[x for x in test if x[0] == 'abc']
Run Code Online (Sandbox Code Playgroud)

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

[['abc', 1]]
Run Code Online (Sandbox Code Playgroud)


Tho*_*hel 6

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

filter( lambda x: x[0]=='abc', test)
Run Code Online (Sandbox Code Playgroud)

返回:

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