gpt4 book ai didi

python - 在 Python 中使用 itertools/more-itertools 对多列列表的项目进行分组和组合

转载 作者:太空狗 更新时间:2023-10-30 02:37:55 26 4
gpt4 key购买 nike

这段代码:

from itertools import groupby, count 
L = [38, 98, 110, 111, 112, 120, 121, 898]
groups = groupby(L, key=lambda item, c=count():item-next(c))
tmp = [list(g) for k, g in groups]

采用 [38, 98, 110, 111, 112, 120, 121, 898] ,将其按连续数字分组并将它们与此最终输出合并:

['38', '98', '110,112', '120,121', '898']

如何对具有多列的列表列表完成同样的操作,如下面的列表,您可以在其中按名称和第二列值的连续性对它们进行分组,然后合并。

换句话说,这个数据:

L= [
['Italy','1','3']
['Italy','2','1'],
['Spain','4','2'],
['Spain','5','8'],
['Italy','3','10'],
['Spain','6','4'],
['France','5','3'],
['Spain','20','2']]

应该给出以下输出:

[['Italy','1-2-3','3-1-10'],
['France','5','3'],
['Spain','4-5-6','2-8-4'],
['Spain','20','2']]

more-itertools 是否更适合这项任务?

在 Python 中使用 itertools/more-itertools 对多列列表的项目进行分组和组合

最佳答案

您可以构建相同的配方并修改 lambda 函数以包含每行中的第一项(国家/地区)。其次,您需要首先根据列表中最后出现的国家/地区对列表进行排序。

from itertools import groupby, count


L = [
['Italy', '1', '3'],
['Italy', '2', '1'],
['Spain', '4', '2'],
['Spain', '5', '8'],
['Italy', '3', '10'],
['Spain', '6', '4'],
['France', '5', '3'],
['Spain', '20', '2']]


indices = {row[0]: i for i, row in enumerate(L)}
sorted_l = sorted(L, key=lambda row: indices[row[0]])
groups = groupby(
sorted_l,
lambda item, c=count(): [item[0], int(item[1]) - next(c)]
)
for k, g in groups:
print [k[0]] + ['-'.join(x) for x in zip(*(x[1:] for x in g))]

输出:

['Italy', '1-2-3', '3-1-10']
['France', '5', '3']
['Spain', '4-5-6', '2-8-4']
['Spain', '20', '2']

关于python - 在 Python 中使用 itertools/more-itertools 对多列列表的项目进行分组和组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48664043/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com