【问题标题】:Check if item is in an array / list检查项目是否在数组/列表中
【发布时间】:2012-06-30 09:22:04
【问题描述】:

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

if [check that item is in array]:

【问题讨论】:

标签: python arrays contains


【解决方案1】:

使用 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)

【讨论】:

  • 这适用于 Python2。使用 Python 3.7,您将收到此错误:TypeError: object of type 'filter' has no len()
【解决方案2】:

假设你说“数组”的意思是“列表”,你可以这样做

if item in my_list:
    # whatever

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

【讨论】:

  • @jdi,该循环的运行速度将比在 Python 中显式编码的循环快得多,更不用说更易于阅读了。
  • in 非常好,但我必须强调,在我们想要检查子字符串是否在字符串列表中的情况下,使用 lambda 是多么好。
【解决方案3】:

您必须对数组使用 .values。 例如,假设您有一个具有列名的数据框,即 test['Name'],您可以这样做

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

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

【讨论】:

  • 我认为你需要一个 Pandas DataFrame 对象才能使用 .values。
【解决方案4】:

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

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

if item in ser.values:
    # do stuff

【讨论】:

    【解决方案5】:

    当您说“数组”时,我还将假设您的意思是“列表”。 Sven Marnach 的解决方案很好。如果您要对列表进行重复检查,那么将其转换为 set 或 freezeset 可能是值得的,这样每次检查都会更快。假设您的 strs 列表称为subjects

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-02
      • 2017-12-21
      • 2021-06-25
      • 2021-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多