[英]List comprehension: why does a conjunction not work? [duplicate]
假设如下:
>>>b = ['a/b', 'a b']
>>>[x for x in b if '/' in x]
['a/b']
>>>[x for x in b if ' ' in x]
['a b']
>>>[x for x in b if '/' and ' ' in x]
['a b']
我的期望是[x for x in b if '/' and ' ' in x]
不应返回任何内容或最多返回一个空列表。 那么为什么[x for x in b if '/' and ' ' in x]
返回['a b']
呢?
如果您仔细检查您的最后一个列表理解:
[x for x in b if '/' and ' ' in x]
你会看到你有两个逻辑条件。 一个是字符串文字'/'
,另一个是' ' in x
。 第一个条件默认为真,所以这里唯一真正的标准是字符串必须有一个空格。 'a b'
满足这个条件。 这是您打算做的事情:
b = ['a/b', 'a b']
output = [x for x in b if '/' in x and ' ' in x]
print(output) # []
现在所有输入都失败了,因为没有一个同时具有空格和正斜杠。
在python
中, if '/' and ' ' in x
你必须这样做if '/' in x and ' ' in x
。 这就是我假设你希望'/'和''都在字符串x中。
下面是一个例子
b = ['a/b', 'a b']
print([x for x in b if '/' in x and ' ' in x]) // output: []
b = ['a/b', 'a b',"a /b"]
print([x for x in b if '/' in x and ' ' in x]) // output: ['a /b']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.