Python:对现有lis中的重复元素进行分组的新列表

2024-10-03 17:18:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一份表格:

>>> my_list = ['BLA1', 'BLA2', 'BLA3', 'ELE1', 'ELE2', 'ELE3', 'PRI1', 'PRI2', 'NEA1', 'NEA2', 'MAU1', 'MAU2', 'MAU3']

我想创建一个新列表,将重复的元素分组到新列表中的列表中,因此最后我将有:

^{pr2}$

Tags: 列表mylist表格bla2bla3bla1ele2
3条回答

使用^{}

import itertools

[list(group) for key, group in itertools.groupby(my_list, key=lambda v: v[:3])]

这里需要key参数来提取您想将分组在上的值的一部分;前3个字符。在

结果:

^{pr2}$

groupby将把相等的连续键组合成1个组。如果有不相交的组(因此值相同,但中间有其他值),它将为这些组创建单独的组:

>>> my_list = ['a1', 'a2', 'b1', 'b2', 'a3', 'a4']
>>> [list(group) for key, group in itertools.groupby(my_list)]
[['a1', 'a2'], ['b1', 'b2'], ['a3', 'a4']]

如果这不是你想要的,你必须先排序my_list。在

作为groupby的替代方法,您可以使用^{}

In [40]: from collections import Counter

In [41]: [ [k]*v for (k,v) in Counter(my_list).iteritems() ]
Out[41]: 
[['PRI', 'PRI'],
 ['NEA', 'NEA'],
 ['BLA', 'BLA', 'BLA'],
 ['MAU', 'MAU', 'MAU'],
 ['ELE', 'ELE', 'ELE']]

与groupby不同的是,如果元素都是混乱的,则无需对列表进行排序。在

一定要分类使用

itertools.groupy

相关问题 更多 >