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

标签 python

我想打乱这个列表:

[[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/

相关文章:

python - PyQt - 如何使用 QItemDelegate 在表格 View 中设置 QComboBox

python - 查询集序列化 : AttributeError: 'dict' object has no attribute '_meta'

python - 如何在 Jupyter Notebook 中为新结构扩展 SymPy pretty-print ?

python - 使用DataNitro,如何打印python循环到excel,确保打印23行后,打印移动到相邻列?

Python对缩进制表符和空格的解释

python - 带有元组键的 msgpack 字典

python - 将嵌套列表中的所有元素转换为整数

python - 在 Django 中截断链接/<a> 标签?

python - 104, 'Connection reset by peer' 套接字错误,或何时关闭套接字会导致 RST 而不是 FIN?

Python/Numpy - 加速放射性衰变的蒙特卡罗方法