gpt4 book ai didi

Python - 将列表的组合排列成各种大小的元组列表

转载 作者:行者123 更新时间:2023-11-28 22:01:35 26 4
gpt4 key购买 nike

我有一个字符串列表:

l = ['a', 'b', 'c']

我想在不同大小的组中创建列表元素的所有可能组合。我希望这是元组的元组列表,但它也可以是列表列表的列表等。元组的顺序以及元组中的元组的顺序无关紧要。列表元素不能在元组或元组的元组中重复。对于上面的列表,我希望是这样的:

[(('a'),('b'),('c')),
(('a', 'b'), ('c')),
(('a', 'c'), ('b')),
(('b', 'c'), ('a')),
(('a', 'b', 'c'))]

非常感谢任何帮助。

编辑:我确实要求列表中的每个元组都包含 l 的所有元素。senderle 和 Antimony,关于遗漏,你们都是正确的。

最佳答案

这是一种做事的方法。不知道有没有更优雅的方法。 itertools 模块具有用于组合和排列的函数,但不幸的是,没有用于分区的函数。

编辑:我的第一个版本不正确,但幸运的是,我已经从我做的一个旧项目中得到了这个。

您还可以通过返回 d 而不是 d.values() 来获得表示与每个分区关联的边位集的唯一整数键。这对于有效地测试一个分区是否是另一个分区的细化很有用。

def connectivityDictSub(num, d, setl, key, i):
if i >= num:
assert(key not in d)
d[key] = setl
else:
for ni in range(len(setl)):
nsetl, nkey = setl[:], key
for other in nsetl[ni]:
assert(other != i)
x,y = sorted((i, other))
ki = ((2*num-3-x)*x)/2 + y-1
nkey |= 1<<ki
nsetl[ni] = nsetl[ni] + [i] #not the same as += since it makes a copy
connectivityDictSub(num, d, nsetl, nkey, i+1)
nsetl = setl + [[i]]
connectivityDictSub(num, d, nsetl, key, i+1)

def connectivityDict(groundSet):
gset = sorted(set(groundSet))
d = {}
connectivityDictSub(len(gset), d, [], 0, 0)
for setl in d.values():
setl[:] = [tuple(gset[i] for i in x) for x in setl]
return map(tuple, d.values())

for x in connectivityDict('ABCD'):
print x

关于Python - 将列表的组合排列成各种大小的元组列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12850950/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com