Python计数出现次数返回0

时间:2012-10-24 23:19:22

标签: python

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

当我尝试:

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

count_ID=alist.count(8)
print count_ID

我收到:

count_ID returns 0

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

3 个答案:

答案 0 :(得分:2)

请改为尝试:

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

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

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

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

上述代码段有效,因为在比较x[1] == 8中,True值评估为1False评估为0

答案 1 :(得分:2)

仅当alist.count(8)8的元素时,

alist才有效:

>>> 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

答案 2 :(得分:2)

列表必须扁平化。 Python不计算嵌套列表。所以它是:

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

让python返回2

这里是ways来压扁列表