计算元组列表中元素的 Python 方法



给定一个元组列表,如

test = [[(2, 0.66835654), (0, 0.22021745), (1, 0.060669053), (6, 0.047858406)],
[(10, 0.6511003), (0, 0.3458588)],
[(4, 0.9961432)],
[(10, 0.9917404)]]

使用元组的第一个元素作为输出列表的索引来创建每个元组的第一个元素的计数列表的 Pythonic 方法是什么?因此,元组(0, 0.2202)将增加输出列表的元素0的计数器。对于此示例,结果将为[2, 1, 1, 0, 1, 0, 1, 0, 0, 0, 2]

如果我正确理解了这个问题,那么您列出的预期输出中存在错误。看看这是否为您提供了所需的内容。请注意,它假设每个元组的第一个元素的最大值为 10,如示例中所示。

test = [[(2, 0.66835654), (0, 0.22021745), (1, 0.060669053), (6, 0.047858406)],
[(10, 0.6511003), (0, 0.3458588)],
[(4, 0.9961432)],
[(10, 0.9917404)]]
results = [0 for _ in range(11)]
for row in test:
for element in row:
results[element[0]] = results[element[0]] + 1
> print(results)
> [2, 1, 1, 0, 1, 0, 1, 0, 0, 0, 2]
from collections import Counter
counter = Counter(item[0] for sublist in test for item in sublist)
results = [counter[i] for i in range(11)]

它包含一个双生成器表达式来处理嵌套列表,所以它的 Pythonic 有多有争议,但我喜欢它的简洁性。如果您希望减少嵌套 for 循环的数量,可以使用itertools.chainitertools.chain.from_iterable

如果您想知道range调用的最大值是多少:

from operator import itemgetter
max_value = max(map(itemgetter(0), sum(test, [])))

相关内容

最新更新