gpt4 book ai didi

python - 按顺序生成组合的最佳方法是什么?

转载 作者:太空宇宙 更新时间:2023-11-04 10:13:19 25 4
gpt4 key购买 nike

l = ['A', 'B', 'C', 'D']

我想按顺序获得所有组合。所以输出应该是这样的,

['ABCD', 'ABC', 'AB', 'A', 'BCD', 'BC', 'B', 'CD', 'C', 'D']

我试过的是..

>>> o = set()
>>> for i, j in enumerate(l):
o.add(''.join(l[:i]))
o.add(''.join(l[i:]))


>>>
>>> o
set(['', 'ABCD', 'AB', 'D', 'BCD', 'CD', 'ABC', 'A'])

但是它错过了 BC。还尝试了 itertools.combinations 但它提供了所有可能的组合,而不管顺序如何。

最佳答案

如果您只查找列表的连续子段,只需迭代开始和结束位置的可能组合并生成一致的切片。由于 end 位置取决于 start,我认为没有办法使用 itertools 函数之一来完成此操作。

def comb_in_order(lst):
for start in range(0, len(lst)):
for end in range(len(lst), start, -1):
yield lst[start:end]

例子:

>>> [''.join(c) for c in comb_in_order(['A', 'B', 'C', 'D'])]
['ABCD', 'ABC', 'AB', 'A', 'BCD', 'BC', 'B', 'CD', 'C', 'D']

可以使用带有附加条件的itertools.product,但这样您将遍历许多无论如何都会被过滤掉的组合,以及结果的顺序略有不同:

>>> [''.join(lst[s:e+1]) for s,e in itertools.product(range(len(lst)), repeat=2) if s <= e]
['A', 'AB', 'ABC', 'ABCD', 'B', 'BC', 'BCD', 'C', 'CD', 'D']

关于python - 按顺序生成组合的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36985457/

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