如何用Python为二维列表的每个子列表生成全排列元组?
解决二维列表子列表全排列的问题
嘿,这事儿用itertools.permutations就能完美解决呀!你之前可能没找对正确的用法,其实它天生就是用来生成全排列的工具。
核心思路
itertools.permutations接受一个可迭代对象(比如你的子列表),默认会生成所有长度等于原对象长度的排列结果,每个结果都是元组,正好匹配你想要的格式。
完整代码示例
import itertools # 你的原始二维列表 values = [[4, 7, 8], [1, 3, 4], [7, 5, 6], [2, 9, 1]] # 为每个子列表生成全排列 result = [] for sublist in values: # 将permutations返回的迭代器转为列表,方便存储和查看 permutations_list = list(itertools.permutations(sublist)) result.append(permutations_list) # 验证第一个子列表的结果,和你给出的args0完全一致 print(result[0])
单独获取指定索引的子列表排列
如果你只需要某个特定索引(比如索引0)的子列表排列,直接针对该子列表调用即可:
args0 = list(itertools.permutations(values[0])) print(args0)
运行后得到的结果就是你示例里的:
[(4, 7, 8), (7, 4, 8), (4, 8, 7), (8, 4, 7), (7, 8, 4), (8, 7, 4)]
小补充
如果之后你需要生成指定长度的排列(比如从3个元素里选2个的排列),可以给permutations传第二个参数,比如itertools.permutations(values[0], 2),不过这是额外扩展啦,你当前的需求用默认参数就足够了。
内容的提问来源于stack exchange,提问作者Wizard
相关产品推荐
相关产品推荐

