我想打乱这个列表:
[[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']]
关于python - 在 Python 中随机排列子列表组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35214352/