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

use*_*392 1 python combinations list

我有以下列表:

mylist = ['car', 'truck', 'ship']
Run Code Online (Sandbox Code Playgroud)

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

from itertools import combinations
print(list(combinations(mylist,2)))
Run Code Online (Sandbox Code Playgroud)

这给了我:

[('car', 'truck'), ('car', 'ship'), ('truck', 'ship')]
Run Code Online (Sandbox Code Playgroud)

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

[('car', 'truck'), ('car', 'ship'), ('truck', 'ship'), ('car', 'truck', 'ship')]
Run Code Online (Sandbox Code Playgroud)

eri*_*rip 5

这是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))
Run Code Online (Sandbox Code Playgroud)

但是,您可以将其更改为仅接受特定范围内的结果.在你的情况下,从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))
Run Code Online (Sandbox Code Playgroud)

这里看到它.

如果您需要它变得更通用,请使用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)
Run Code Online (Sandbox Code Playgroud)