所有(生成器)在应该返回False时返回True

3
我希望检查一个字符串是否包含所有关键字。我正在使用Enthought Canopy发行版。
例如:
string  = 'I like roses but not violets'
key_words = ['roses', 'violets', 'tulips']

我读到过all函数对我很有用。当我以以下方式使用此函数时:

if all( keys in string.lower().split() for keys in key_words):
    print True

然后返回True

我期望返回False,因为tulips不在string.lower().split()中。

我该怎么解决这个问题?


3
无法重现 - 我得到的结果是“False”。 - TigerhawkT3
我也返回了false,你确定你没有使用if not all( keys in string.lower().split() for keys in key_words)或者使用any()吗? - Anand S Kumar
100%确定 http://i.imgur.com/ifJ0Wdr.png - user3600497
2
在你的if语句之前添加这一行:from __builtin__ import all,看看是否有帮助。 - Burhan Khalid
1个回答

7
你的代码中可能有from numpy import *numpyall方法不能很好地处理生成器。
[1]: string  = 'I like roses but not violets'

[2]: key_words = ['roses', 'violets', 'tulips']

[3]: if all( keys in string.lower().split() for keys in key_words):
         ...:         print True
         ...:

[4]: from numpy import *

[5]: if all( keys in string.lower().split() for keys in key_words):
        print True
         ...:
True

如果上下文不在您的控制范围内,则可以使用 from __builtin__ import allall 恢复为文件中的默认版本。然而,建议的方法是进行选择性或限定的导入 numpy


哦,可能是这样。我正在使用Enthought Canopy工作。谢谢。 - user3600497
2
尽可能使用官方发行版,它会注意不要像掩盖内置函数等做法。 - TigerhawkT3
好的,谢谢你的建议。 - user3600497

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接