【问题标题】:Searching for a number of a certain item in a list在列表中搜索某个项目的数量
【发布时间】:2014-11-17 15:26:52
【问题描述】:

我想在列表中查找某个项目,但列表中可能有超过 1 个该项目,但我想要它以便对列表中的每个项目,它都会做一些事情。

例如:

list = ["1", "1", "2"]
for "1" in list:
    print ("hi")

对于列表中的 2 个 '1's,它应该打印两次 'hi'

【问题讨论】:

标签: python python-3.x for-loop


【解决方案1】:

你可以使用 count 方法来做到这一点:

lst = ["1", "1", "2"]
for i in range(lst.count("1")):
   print "Hi"

一个班轮

print "Hi\n" * lst.count("1")

注意:我已将变量名 'list' 更改为 'lst' 作为避免 python 关键字覆盖的好习惯。

【讨论】:

    【解决方案2】:

    您可以使用 python 的内置过滤语法轻松做到这一点:

    def hi(number, lst):
        for item in (element for element in lst if element == number):
            print('hi')
    

    与其他方法相比,此方法的优势在于,如果您愿意,您实际上可以在迭代时对符合您的条件的元素执行某些操作。

    用法:

    >>>hi(1,[1,1,2])
    hi
    hi
    

    【讨论】:

    • 这似乎最接近问题的要求,但不幸的是语法不正确 - 您需要完整的生成器表达式。如果 python 能做到这一点就好了。
    • @neil doh,你说得对,当时正在用我的手机接听电话,但打字很懒。固定
    • 这样更好 - 它让您可以访问每个项目来做任何事情。
    • @neil 和 python 对 list-comps 的处理方式,即 I.E.这可以简单地重写为[print('hi') for element in lst if item == element],它只是不允许您在不从您的方法创建一个无用的返回列表的情况下执行此操作,或者在这种简单的情况下,或者使用生成器的不必要的冗长for循环。我同意拥有一个不分配列表的map() 会非常方便,它只是执行了迭代+应用方法。或者只是让for 循环几乎与map 或列表推导式一样快。
    【解决方案3】:

    我认为这是最简单、最易读的语法。它准确地说明了它的作用,不导入任何模块,不调用函数,也不创建临时变量。很容易替换任何比较和任何以item为参数的函数。

    for item in lst:
        if element == number:
            print('hi')
    

    【讨论】:

      猜你喜欢
      • 2015-08-31
      • 1970-01-01
      • 2020-04-05
      • 1970-01-01
      • 2011-05-26
      • 1970-01-01
      • 2011-08-12
      • 2014-04-21
      • 1970-01-01
      相关资源
      最近更新 更多