【问题标题】:Python 3 Testing a range of items within a listPython 3 测试列表中的一系列项目
【发布时间】:2012-01-05 00:32:50
【问题描述】:

我有一个名为inventory[] 的列表或数组,它在任何给定时间最多有15 个条目。我需要测试这些条目中的任何一个是否等于零,如果任何一个条目等于零,请执行一些操作。什么是不做的有效方法

if inventory[0] == 0 or inventory[1] == 0 or inventory[2] == 0...

等等?

【问题讨论】:

  • "测试这些条目中是否有任何一个等于 0,如果任何一个条目等于 0,则执行一些操作。"令人困惑。 “任何这些条目”和“任何一个条目”有什么区别?做什么事情——一般的事情,或者特别是有一个/一些/所有零条目的事情,你需要知道列表中零条目的位置(索引)?

标签: python arrays list if-statement


【解决方案1】:

对于您的简单情况,我认为您可以这样做:

if 0 in inventory:
  # do something

对于此类事物的更一般情况,您可以使用any 函数 (docs)。

if any([item == 0 for item in inventory]):
  # do something

【讨论】:

  • +1 表示if 0 in inventory。有时人们会忘记更容易的事情:)
【解决方案2】:

Python 内置的any() 函数非常适合此功能。它接受一个可迭代对象作为参数,如果任何元素为真(非假),则返回 True

if any(item == 0 for item in inventory):
    # do something

还有一个类似的函数称为all(),如果所有元素都为True,它将返回True

【讨论】:

    【解决方案3】:

    利用all 函数,以及0 评估为False 的事实:

    if not all(inventory):
        ...
    

    编辑:当然,假设 inventory 只包含数字

    【讨论】:

    • 易碎,例如inventory = ['spam', [], 'eggs'] 可能会破坏
    • @wim:当然;我假设inventory 是一个整数列表(这就是为什么那里有一个 0)
    • 如果不需要,最好不要做出这样的假设,或者至少在你的回答中提及这些假设。
    【解决方案4】:

    试试这个:

    inventory=[1,2,3,4,0]
    if 0 in inventory:
     print "There is 0 in the list"
    

    输出: 列表中有0个

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-11
      • 2015-05-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多