Python if if()不起作用

时间:2014-05-13 20:11:03

标签: python if-statement numpy ipython

我想检查列表phrases中的任何字符串元素是否包含集phd_words中的某些关键字。我想使用any,但它不起作用。

In[19]:
    import pandas as pd
    import psycopg2 as pg

    def test():
    phd_words = set(['doctor', 'phd'])
    phrases = ['master of science','mechanical engineering']
    for word in phrases:
        if any(keyword in word for keyword in phd_words):
            return 'bingo!'

test()

Out[20]: 
  bingo!

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:11)

如果您使用IPython的%pylab魔法:

,可能会发生这种情况
In [1]: %pylab
Using matplotlib backend: Qt4Agg
Populating the interactive namespace from numpy and matplotlib

In [2]: if any('b' in w for w in ['a', 'c']):
   ...:     print('What?')
   ...:
What?

原因如下:

In [3]: any('b' in w for w in ['a', 'c'])
Out[3]: <generator object <genexpr> at 0x7f6756d1a948>

In [4]: any
Out[4]: <function numpy.core.fromnumeric.any>

anyallnumpy函数遮蔽,而且这些函数与内置函数不同。这就是我停止使用%pylab并开始使用%pylab --no-import-all的原因,这样它就不会像这样破坏命名空间。

要在内置函数已被遮蔽时到达它,可以尝试__builtin__.any。名称__builtin__似乎在IPython中可用于Python 2和Python 3,它本身可能由IPython启用。在脚本中,首先必须在Python 2上import __builtin__和在Python 3上import builtins