将列表中的元素组合成一个新列表



我不确定我要做的事情的技术术语,但这是它的要点。我有以下清单:

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

我想创建一个新的列表y,其中len(y) = 2 ** len(x)使:

y = ['∅', 'a', 'b', 'c', 'a,b', 'a,c', 'b,c', 'a,b,c']

我不确定在遍历x以创建所需列表y时使用什么操作。

虽然这比itertools效率低得多,但如果不允许使用库,您可以创建一个递归函数来生成幂集,并在列表推导中使用join()来组合字符串:

def powerSet(L):
return [[]] if not L else [c for p in powerSet(L[1:]) for c in (p,L[:1]+p)]
x = ['a','b','c']
y = [",".join(s) or "ø" for s in powerSet(x)]
print(y)
['ø', 'a', 'b', 'a,b', 'c', 'a,c', 'b,c', 'a,b,c']

您也可以直接在迭代函数中执行此操作,该函数扩展列表中每个字母的所有先前组合:

def allCombos(L):
result = [""]
for c in L:
result.extend([f"{r},{c}" if r else c for r in result])
result[0] = "ø"
return result
print(allCombos(x))
['ø', 'a', 'b', 'a,b', 'c', 'a,c', 'b,c', 'a,b,c']

最新更新