首页 > 解决方案 > 生成不重复的字符串列表和锚元素的组合

问题描述

我有一个如下所示的列表:

x = [ 'foo', 'bar', 'alpha' ]

输出应如下所示。所以'foo'需要始终出现在输出中

[
 ['foo'],
 ['foo', 'bar']
 ['foo','alpha']
 ['foo','bar','alpha']
]

我查看了itertools.permutationsitertools.combinations但两者似乎都不适用于此用例,因为他们认为值是按位置而不是数组中的值是唯一的。

标签: pythoncombinationspermutation

解决方案


您可以使用combinationson x[1:],改变参数r

import itertools

x = ['foo', 'bar', 'alpha']

output = []
for r in range(len(x)):
    output += [['foo'] + list(a) for a in itertools.combinations(x[1:], r)] # attach 'foo' to each item

print(output) # [['foo'], ['foo', 'bar'], ['foo', 'alpha'], ['foo', 'bar', 'alpha']]

在 python 3.5+ 中,您可以在循环中使用解包来增强可读性:

    output += [['foo', *a] for a in itertools.combinations(x[1:], r)]

推荐阅读