组合列表中的元素以形成新列表

2024-06-17 13:26:23 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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时要使用什么操作


Tags: 列表len技术术语要点
1条回答
网友
1楼 · 发布于 2024-06-17 13:26:23

尽管这比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']

相关问题 更多 >