我想检查列表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!
我该如何解决这个问题?
答案 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>
any
和all
被numpy
函数遮蔽,而且这些函数与内置函数不同。这就是我停止使用%pylab
并开始使用%pylab --no-import-all
的原因,这样它就不会像这样破坏命名空间。
要在内置函数已被遮蔽时到达它,可以尝试__builtin__.any
。名称__builtin__
似乎在IPython中可用于Python 2和Python 3,它本身可能由IPython启用。在脚本中,首先必须在Python 2上import __builtin__
和在Python 3上import builtins
。