首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >字符串列表与排除项的组合

字符串列表与排除项的组合
EN

Stack Overflow用户
提问于 2018-07-12 18:48:52
回答 2查看 57关注 0票数 0

我正在努力想出一个系统组件操作状态的详尽列表。我需要每个组件的一个工作状态。我已经为每个操作状态开发了唯一的索引,表单组件#-OS#,所以如果组件1有三种操作状态,它们将是1-1,1-2,1-3等等。我希望排除每个组件的重复操作状态,以便每个组件中只有一个存在。我正在使用迭代工具组合,但需要找出如何有效地合并排除(我的问题比下面的示例问题要大得多):

代码语言:javascript
运行
复制
 from itertools import combinations
 indices=["1-1", "1-2", "1-3", "2-1", "2-2", "3-1", "3-2", "4-1", "4-2", "4-3", "5-1", "5-2", "5-3"]
 out=list(combinations(indices, 5))

正如现在所写的,out包含许多重复的操作状态,并且比我想要的要长得多。我可以很容易地过滤掉他们之后,但这将是一个非常耗时的努力。当我把它带到全面的问题上时,将会有数亿的组合,所以我需要找到一种有效地限制输出的方法,使每个组件只包含一个操作状态。这可能需要以某种方式修改组合函数,但我不知道从哪里开始。

有什么想法吗?

编辑

为了澄清,我希望得到表格的输出:

1-1,2-1,3-1,4-1,5-1,1-2,2-1,3-1,4-1,5-1.1-3,2-2,3-2,4-3,5-3

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-12 19:16:20

您应该将每个组件的状态分离为自己的列表,并使用itertools.product

代码语言:javascript
运行
复制
from itertools import groupby, product
statelist = ["1-1", "1-2", "1-3", "2-1", "2-2", "3-1", "3-2", "4-1", "4-2", "4-3", "5-1", "5-2", "5-3"]
statelist = (list(b) for a, b in groupby(statelist, lambda x: x.partition('-')[0]))
out = list(product(*statelist))
票数 1
EN

Stack Overflow用户

发布于 2018-07-12 19:40:16

代码语言:javascript
运行
复制
>>> from collections import defaultdict
>>> from itertools import product
>>> indices=["1-1", "1-2", "1-3", "2-1", "2-2", "3-1", "3-2", "4-1", "4-2", "4-3", "5-1", "5-2", "5-3"]
>>> d=defaultdict(list)
>>> for e in indices:
...     d[e.split('-')[0]] += [e]
...
>>> out = list(product(*d.values()))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51312564

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档