Skip to main content
 首页 » 编程设计

python之从 python 中的列表生成所有可能的 2 和 3 字符串组合

2025年05月04日15think

我有以下列表:

mylist = ['car', 'truck', 'ship'] 

目前我只能使用这个获得 2 个字符串的所有可能组合:

from itertools import combinations 
print(list(combinations(mylist,2))) 

这给了我:

[('car', 'truck'), ('car', 'ship'), ('truck', 'ship')] 

然而,一个组合实际上是所有 3 个字符串。因此,我希望我的结果是:

[('car', 'truck'), ('car', 'ship'), ('truck', 'ship'), ('car', 'truck', 'ship')] 

请您参考如下方法:

这是 powerset 的调整情况。通常 Python 中的 powerset 代码如下所示:

from itertools import chain, combinations 
 
def powerset(it): 
    yield from chain.from_iterable(combinations(it, r) for r in range(len(it)+1)) 

不过,您可以将其更改为仅接受特定范围内的结果。在你的例子中,它是从 2 到 3:

from itertools import chain, combinations 
 
def adjusted_powerset(it): 
    yield from chain.from_iterable(combinations(it, r) for r in range(2, 3)) 

查看实际效果 here .

如果您需要它变得更通用,请使用 range 参数。一个不错的模板是创建一个 powerset 助手:

from itertools import chain, combinations 
 
def powerset_helper(it, start, stop): 
    yield from chain.from_iterable(combinations(it, r) for r in range(start, stop+1)) 
 
def powerset(it): 
    yield from powerset_helper(it, 0, len(it)) 
 
def adjusted_powerset(it): 
    yield from powerset_helper(it, 2, 3)