【发布时间】:2012-06-30 09:22:04
【问题描述】:
如果我有一个字符串数组,我可以在不执行for 循环的情况下检查字符串是否在数组中吗?具体来说,我正在寻找一种在if 语句中执行此操作的方法,如下所示:
if [check that item is in array]:
【问题讨论】:
-
我想问题已经回答了here
如果我有一个字符串数组,我可以在不执行for 循环的情况下检查字符串是否在数组中吗?具体来说,我正在寻找一种在if 语句中执行此操作的方法,如下所示:
if [check that item is in array]:
【问题讨论】:
使用 lambda 函数。
假设你有一个数组:
nums = [0,1,5]
在Python 3.X中检查5是否在nums中:
(len(list(filter (lambda x : x == 5, nums))) > 0)
在Python 2.7中检查5是否在nums中:
(len(filter (lambda x : x == 5, nums)) > 0)
此解决方案更强大。您现在可以检查数组nums中是否有任何满足某个条件的数字。
例如检查nums中是否存在大于等于5的数字:
(len(filter (lambda x : x >= 5, nums)) > 0)
【讨论】:
TypeError: object of type 'filter' has no len()
假设你说“数组”的意思是“列表”,你可以这样做
if item in my_list:
# whatever
这适用于任何集合,而不仅仅是列表。对于字典,它检查给定的键是否存在于字典中。
【讨论】:
in 非常好,但我必须强调,在我们想要检查子字符串是否在字符串列表中的情况下,使用 lambda 是多么好。
您必须对数组使用 .values。 例如,假设您有一个具有列名的数据框,即 test['Name'],您可以这样做
if name in test['Name'].values :
print(name)
对于普通列表,您不必使用 .values
【讨论】:
您也可以对数组使用相同的语法。例如,在 Pandas 系列中搜索:
ser = pd.Series(['some', 'strings', 'to', 'query'])
if item in ser.values:
# do stuff
【讨论】:
当您说“数组”时,我还将假设您的意思是“列表”。 Sven Marnach 的解决方案很好。如果您要对列表进行重复检查,那么将其转换为 set 或 freezeset 可能是值得的,这样每次检查都会更快。假设您的 strs 列表称为subjects:
subject_set = frozenset(subjects)
if query in subject_set:
# whatever
【讨论】: