2012-06-28 26 views
124

如果我有一个字符串数组,我可以检查一个字符串是否在数组中而不执行for循环吗?具体来说,我正在寻找一种方式来的if语句中做到这一点,所以是这样的:检查项目是否在数组/列表

if [check that item is in array]: 
+1

我认为这个问题是已经回答[这里](http://stackoverflow.com/questions/9542738/python-find-in-list) –

+0

或更好的这里:http://stackoverflow.com/questions/12934190/is-there-a-short -contains-function-for-lists – torina

+0

可能的重复[检查列表中是否存在值的最快方法](https://stackoverflow.com/questions/7571635/fastest-way-to-check-if-a-存在于列表中的值) –

回答

242

假设你的意思是“清单”里你说“阵列”,你可以做

if item in my_list: 
    # whatever 
+45

......就是这样吗?我一直在谷歌搜索20分钟.... – SomeKittens

+2

@SomeKittens:列表将在内部做自己的循环来测试成员资格。 – jdi

+1

@jdi,并且该循环运行速度比Python中显式编码的循环快得多,更不用说更易于阅读了。 –

15

当你说“数组”时,我还会假定你的意思是“列表”。 Sven Marnach的解决方案很好。如果您要对列表进行重复检查,则可能需要将其转换为集合或冻结集合,对于每个检查来说可以更快。假设你的STR的列表被称为subjects

subject_set = frozenset(subjects) 
if query in subject_set: 
    # whatever 
-1

您也可以使用相同的语法的数组。例如,在Pandas系列内搜索:

ser = pd.Series(['some', 'strings', 'to', 'query']) 

if item in ser.values: 
    # do stuff 
0

使用lambda函数。

比方说,你有一个数组:

nums = [0,1,5] 

检查是否5是nums

(len(filter (lambda x : x == 5, nums)) > 0) 

该解决方案更强劲。您现在可以检查是否有任何数字满足条件在您的数组nums中。

例如,检查在nums是否存在任何数目大于或等于5:

(len(filter (lambda x : x >= 5, nums)) > 0) 
0

你必须使用.values为阵列。 例如说你有数据帧具有列名即测试[“名称”],你可以为你不正常的名单做

if name in test['Name'].values : 
    print(name) 

必须使用.values

相关问题