python - 生成不重复的字符串列表和锚元素的组合
问题描述
我有一个如下所示的列表:
x = [ 'foo', 'bar', 'alpha' ]
输出应如下所示。所以'foo'需要始终出现在输出中
[
['foo'],
['foo', 'bar']
['foo','alpha']
['foo','bar','alpha']
]
我查看了itertools.permutations和itertools.combinations但两者似乎都不适用于此用例,因为他们认为值是按位置而不是数组中的值是唯一的。
解决方案
您可以使用combinations
on 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)]
推荐阅读
- javascript - 循环上的 Vuetify 对话框组件以确认删除事件
- django - 未找到“文章创建”的反向。'article-create' 不是有效的视图函数或模式名称
- stream - SICP第3.5.2章无限流整数定义
- scala - 排除 src/main/resources 下的所有文件
- security - 将 github 用于私人项目是个好主意吗?
- reactjs - rxjs momentjs 过滤过去 30 天
- python - 如何在随机化领带顺序的同时对熊猫系列的值进行排序?
- javascript - 为什么在使用 enqueueNDRangeKernel 时会出现“Invalid kernel arguments”错误?
- javascript - .m4v 格式的标题视频无法在 IE 11 中播放
- php - 使用 PHP 和 Codeigniter 登录 API 失败