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

Som*_*ens 181 python arrays contains

如果我有一个字符串数组,我可以检查一个字符串是否在数组中而不进行for循环?具体来说,我正在寻找一种方法在一个if语句中这样做,所以像这样:

if [check that item is in array]:
Run Code Online (Sandbox Code Playgroud)

Sve*_*ach 360

假设你的意思是"列表",你说"阵列",你可以这样做

if item in my_list:
    # whatever
Run Code Online (Sandbox Code Playgroud)

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

  • @SomeKittens:列表将在内部执行自己的循环来测试成员资格. (2认同)

Mic*_*man 16

当你说"数组"时,我也会认为你的意思是"列表".Sven Marnach的解决方案很好.如果您要对列表进行重复检查,则可能需要将其转换为set或frozenset,这对于每个检查都可以更快.假设您的strs列表被调用subjects:

subject_set = frozenset(subjects)
if query in subject_set:
    # whatever
Run Code Online (Sandbox Code Playgroud)


Mar*_*dor 5

使用 lambda 函数。

假设您有一个数组:

nums = [0,1,5]
Run Code Online (Sandbox Code Playgroud)

检查 5 是否numsPython 3.X 中

(len(list(filter (lambda x : x == 5, nums))) > 0)
Run Code Online (Sandbox Code Playgroud)

检查 5 是否numsPython 2.7 中

(len(filter (lambda x : x == 5, nums)) > 0)
Run Code Online (Sandbox Code Playgroud)

这个解决方案更健壮。您现在可以检查您的数组中是否有任何满足特定条件的数字nums

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

(len(filter (lambda x : x >= 5, nums)) > 0)
Run Code Online (Sandbox Code Playgroud)

  • 这适用于 Python2。使用 Python 3.7,您将收到此错误:`TypeError: object of type 'filter' has no len()` (3认同)