我有一个列表,其中分别包含一个人的姓名、年龄和 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 的项目。我怎样才能解决这个问题?
我有一个列表,其中分别包含一个人的姓名、年龄和 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 的项目。我怎样才能解决这个问题?
试试这个:
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
值的计算结果为1
,a 的False
计算结果为0
。
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
列表必须是扁平的。Python 不计算嵌套列表。所以它会是:
alist=[(('john', 37), 8),(('john', 37), 8),8,8]
让python返回2
这是扁平化列表的方法