簡體   English   中英

Python:新列表對現有列表中的重復元素進行分組

[英]Python: New list grouping repeated elements from existing list

我有一個表單列表:

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

我想創建一個新列表,將重復的元素分組到我的新列表中的列表中,所以最后我會:

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

使用itertools.groupby

import itertools

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

key這里需要參數提取你想組值的只是一部分; 前3個字符。

結果:

>>> my_list = ['BLA1', 'BLA2', 'BLA3', 'ELE1', 'ELE2', 'ELE3', 'PRI1', 'PRI2', 'NEA1', 'NEA2', 'MAU1', 'MAU2', 'MAU3']
>>> [list(group) for key, group in itertools.groupby(my_list, key=lambda v: v[:3])]
[['BLA1', 'BLA2', 'BLA3'], ['ELE1', 'ELE2', 'ELE3'], ['PRI1', 'PRI2'], ['NEA1', 'NEA2'], ['MAU1', 'MAU2', 'MAU3']]

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進行排序。

確保它已分類並使用

itertools.groupy

作為groupby的替代方法,您可以使用collections.Counter

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不同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM