Ale*_*hor 3 python algorithm tuples list python-3.x
我有一个如下所示的数据列表结构:
[('a', 1),('a', 2),('b', 0),('b', 1),('c', 0)]
Run Code Online (Sandbox Code Playgroud)
如果第一项相同,我正在尝试组合元组的第二个值。(并删除重复项)
最终结果应该是:
[('a', 3),('b', 1),('c', 0)]
Run Code Online (Sandbox Code Playgroud)
我的方法是创建第二个空列表并检查列表中是否存在第一个元素,如果不存在则追加。否则循环遍历第二个列表,并将迭代中 [1] 项的值从第一个列表添加到第二个列表中的 [1] 项。我无法让我的概念发挥作用。如果有人有更有效的解决方案,我也愿意接受建议。
secondList = []
for item in firstList:
if (secondList.count(item[0]]):
secondList.append(item)
else:
for item_j in secondList:
if (item_j[0] == item[0]):
item_j[1] = item_j[1]+item[1]
Run Code Online (Sandbox Code Playgroud)
您可以使用itertools.groupby. 首先按第 0 个索引对它们进行分组sum,然后对每组第 1 个索引处的值进行分组:
from itertools import groupby
from operator import itemgetter
data = [("a", 1),("a", 2),("b", 0),("b", 1),("c", 0)]
result = [(k, sum(item[1] for item in g)) for k, g in groupby(data, key=itemgetter(0))]
print(result)
Run Code Online (Sandbox Code Playgroud)
输出:
[('a', 3), ('b', 1), ('c', 0)]
Run Code Online (Sandbox Code Playgroud)
PS:请注意,如果您的列表尚未按照文档中的说明按第 0 个索引排序,则这将无法按您的预期工作:
通常,迭代需要已经在同一个键函数上排序。
| 归档时间: |
|
| 查看次数: |
236 次 |
| 最近记录: |