'在' operator:包含单词与单词列表的文本

时间:2016-07-20 12:39:06

标签: python list python-2.7 split

为什么下面的示例3(使用text.split())产生正确的结果,而示例4不正确 - 即它不产生结果,就像示例1一样。

为什么示例2仍会产生结果(即使它不是理想的结果),尽管它不使用text.split()

>>> text = 'the quick brown fox jumps over the lazy dog'
  1. 形容词之间不匹配的情况:结果无预期

    >>> adjectives = ['slow', 'crippled']
    >>> firstAdjective = next((word for word in adjectives if word in text), None)
    >>> firstAdjective
    >>>
    
  2. 与形容词中第1个匹配但在文本中实际上是第2个的情况:

    >>> adjectives = ['slow', 'brown', 'quick', 'lazy']
    >>> firstAdjective = next((word for word in adjectives if word in text), None)
    >>> firstAdjective
    'brown'
    
  3. 案例中与第1个匹配的案例,这是想要的

    >>> firstAdjective = next((word for word in text.split() if word in adjectives), None)
    >>> firstAdjective
    'quick'
    
  4. 省略.split()的情况。注意:这不起作用。

    >>> firstAdjective = next((word for word in text if word in adjectives), None)
    >>> firstAdjective
    >>>
    
  5. 这个例子来自我的问题Python: Expanding the scope of the iterator variable in the any() function

    的答案

2 个答案:

答案 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运算符检查wordtext的子字符串,而不必使用split。请注意,text不会分为单词。 'wn fo' in text将返回True