为什么下面的示例3(使用text.split()
)产生正确的结果,而示例4不正确 - 即它不产生结果,就像示例1一样。
为什么示例2仍会产生结果(即使它不是理想的结果),尽管它不使用text.split()
?
>>> text = 'the quick brown fox jumps over the lazy dog'
形容词之间不匹配的情况:结果无预期
>>> adjectives = ['slow', 'crippled']
>>> firstAdjective = next((word for word in adjectives if word in text), None)
>>> firstAdjective
>>>
与形容词中第1个匹配但在文本中实际上是第2个的情况:
>>> adjectives = ['slow', 'brown', 'quick', 'lazy']
>>> firstAdjective = next((word for word in adjectives if word in text), None)
>>> firstAdjective
'brown'
案例中与第1个匹配的案例,这是想要的
>>> firstAdjective = next((word for word in text.split() if word in adjectives), None)
>>> firstAdjective
'quick'
省略.split()
的情况。注意:这不起作用。
>>> firstAdjective = next((word for word in text if word in adjectives), None)
>>> firstAdjective
>>>
这个例子来自我的问题Python: Expanding the scope of the iterator variable in the any() function
的答案答案 0 :(得分:2)
迭代字符串(text
)将迭代其字符,因此可以更明确地重写第4个循环:
firstAdjective = next((character for character in text if character in adjectives), None)
答案 1 :(得分:0)
字符串是一个容器,因此in
仍然可以使用它。但是,它不会自然地分成单词,而是迭代字符。在示例4中,word
将连续获取每个字符的值。赋予变量名称word
并不能成为一个单词。
在示例2中,您正在迭代列表adjectives
而不是字符串,因此您获得word
的“预期”行为,获取单词的值。然后in
运算符检查word
是text
的子字符串,而不必使用split
。请注意,text
不会分为单词。 'wn fo' in text
将返回True
。