使用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
最初にソートする必要があります。