检查项目是否在数组/列表中


203

如果我有一个字符串数组,是否可以检查字符串是否在数组中而不进行for循环?具体来说,我正在寻找一种在if语句中执行此操作的方法,因此如下所示:

if [check that item is in array]:

3
我认为问题已经在这里
塔伦·安德


Answers:


394

假设您说“列表”的意思是“数组”,那么您可以

if item in my_list:
    # whatever

这适用于任何集合,而不仅仅是列表。对于字典,它将检查字典中是否存在给定的键。


1
@jdi,该循环的运行速度比Python中显式编码的循环快得多,更不用说更容易阅读了。
Mark Ransom 2012年

17

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

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

3

使用lambda函数。

假设您有一个数组:

nums = [0,1,5]

检查5是否在nums

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

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

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

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

这适用于Python2。使用Python 3.7,您会收到以下错误:TypeError: object of type 'filter' has no len()
Jun711 '19

1

您必须对数组使用.values。例如,假设您的数据框的列名称为test ['Name'],则可以

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

对于普通列表,您不必使用.values


我认为您需要一个Pandas DataFrame对象才能使用.values。
troymyname00

-3

您也可以对数组使用相同的语法。例如,在熊猫系列中搜索:

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

if item in ser.values:
    # do stuff
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.