Skip to main content
 首页 » 编程设计

python之在 Python 中随机排列子列表组

2025年05月04日14webabcd

我想打乱这个列表:

[[1, 'A'], [2, 'A'], [6, 'B'], [3, 'B'], [4, 'C'], [5, 'C'], [7, 'F']] 

但我需要由子列表的第二个元素标识的组保持在一起,以便打乱后的列表看起来像这样:

[[6, 'B'], [3, 'B'], [7, 'F'], [1, 'A'], [2, 'A'], [4, 'C'], [5, 'C']] 

所有“B”、“F”、“A”和“C”子列表都在一起。

我猜测结合使用 shuffle 和 groupby 可以解决问题,但我不知道从哪里开始。任何想法将不胜感激!

请您参考如下方法:

items = [[1, 'A'], [2, 'A'], [6, 'B'], [3, 'B'], [4, 'C'], [5, 'C'], [7, 'F']] 
 
import itertools, operator, random 
 
groups = [list(g) for _, g in itertools.groupby(items, operator.itemgetter(1))] 
random.shuffle(groups) 
shuffled = [item for group in groups for item in group] 
 
print(shuffled) 

打印例如:

[[4, 'C'], [5, 'C'], [1, 'A'], [2, 'A'], [7, 'F'], [6, 'B'], [3, 'B']]