【问题标题】:Python count occurrence returns 0Python 计数出现返回 0
【发布时间】:2012-10-15 02:09:00
【问题描述】:

我有一个列表,其中分别包含一个人的姓名、年龄和 id。 我想计算列表中给定 id 的出现次数。

当我尝试时:

alist=[(('john', 37), 8),(('john', 37), 8)]

count_ID=alist.count(8)
print count_ID

我收到:

count_ID returns 0

我希望它在此示例中返回 2,因为列表中有 2 个 id=8 的项目。我怎样才能解决这个问题?

【问题讨论】:

    标签: python


    【解决方案1】:

    试试这个:

    alist = [ (('john', 37), 8), (('john', 37), 8) ]
    sum(1 for x in alist if x[1] == 8)
    

    您必须以某种方式指定 id 字段作为元组中的第二个元素存在,然后仅过滤掉带有 id == 8 的那些元组,最后为找到的每个元组求和 1 - 或者我们可以找出结果列表的长度,但为什么要在生成器足够时创建一个临时列表?

    正如 cmets 中所指出的,这也有效:

    sum(x[1] == 8 for x in alist)
    

    上述 sn-p 之所以有效,是因为在比较中,x[1] == 8 True 值的计算结果为 1False 的计算结果为 0

    【讨论】:

    • 或者只是sum(x[1] == 0 for x in alist)
    【解决方案2】:

    列表必须是扁平的。 Python 不计算嵌套列表。所以应该是:

    alist=[(('john', 37), 8),(('john', 37), 8),8,8]
    

    让python返回2

    这里是ways 来扁平化列表

    【讨论】:

      【解决方案3】:

      alist.count(8) 仅在 8alist 的元素时才有效:

      >>> alist = [(('john', 37), 8),(('john', 37), 8)]
      >>> 8 in alist
      False
      

      但是,8 是列表中第一个元素的一个元素:

      >>> 8 in alist[0]
      True
      

      所以要计算出现次数,你必须检查8是否在alist的每个元素中:

      >>> sum(i[1] == 8 for i in alist)
      2
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-23
        相关资源
        最近更新 更多