Skip to main content
 首页 » 编程设计

生成列表列表的Pythonic方式

2025年05月04日9qq78292959

从以下输入实现转换的最 pythonic 方式是什么:

 input = [('a', 1), ('a', 10), ('b', 244), ('c', 31) , ('c',45)] 

到所需的输出:

output = [[('a',1),('a',10)],[('c',31),('c',45)]] 

我分组的地方列出了具有相同第一个元素的元组。

感觉 Python 在一行中编写复杂的东西方面具有强大的潜力(我是新手),我决定使用综合列表。我最初的尝试是这样的:

output = [x for x in input if [k[0] for f in input].count(x[0])>1]  

给我所有“伪”副本的漂亮列表:

output = [('a',1),('a',10),('c',31),('c',45)] 

我进一步处理以获得我的结果。

我的问题是:有没有一种方法可以使用综合列表而不是两个(丑陋的)步骤在一行中实现这一结果?

请您参考如下方法:

使用 itertools 中的 groupby 和列表理解。这将为您提供一个简单的衬垫:

from itertools import groupby 
 
filter(lambda x: len(x)>1, [list(g) for i,g in groupby(input, key=lambda x: x[0])]) 
[[('a', 1), ('a', 10)], [('c', 31), ('c', 45)]]