首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >元组的子元组

元组的子元组
EN

Stack Overflow用户
提问于 2015-05-01 18:43:39
回答 3查看 837关注 0票数 3

我如何生成

代码语言:javascript
复制
[(0,), (1,), (2,), (0,1), (0,2), (1,2), (0,1,2)]

以编程的方式(也就是说,不用手工写出所有内容)?也就是说,元组(0,1,2)的所有非空子元组的列表。

(注意,这不是要求子集,而是子元组。)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-05-01 18:48:21

代码语言:javascript
复制
>>> from itertools import combinations
>>> t = (0, 1, 2)
>>> print [subset for r in range(1,4) for subset in itertools.combinations(t,r)]
[(0,), (1,), (2,), (0, 1), (0, 2), (1, 2), (0, 1, 2)]

Itertools是一种强大的资源。你应该检查一下文档

票数 5
EN

Stack Overflow用户

发布于 2015-05-01 18:49:42

您可以使用powerset() 食谱并删除空集:

代码语言:javascript
复制
from itertools import chain, combinations

def powerset(iterable):
    "powerset([1,2,3]) --> () (1,) (2,) (3,) (1,2) (1,3) (2,3) (1,2,3)"
    s = list(iterable)
    return chain.from_iterable(combinations(s, r) for r in range(len(s)+1))

如下所示:

代码语言:javascript
复制
In [3]: [ss for ss in powerset([0,1,2]) if ss]
Out[3]: [(0,), (1,), (2,), (0, 1), (0, 2), (1, 2), (0, 1, 2)]
票数 4
EN

Stack Overflow用户

发布于 2015-05-01 18:51:17

您想要的基本上是powerset,但是没有空集。通过修改python迭代工具页面中的菜谱,从1的组合大小开始

代码语言:javascript
复制
from itertools import combinations, chain

def almost_powerset(seq):
    return list(chain.from_iterable(combinations(seq, r) 
                for r in range(1, len(seq)+1)))

然后把你的顺序

代码语言:javascript
复制
lst = [0, 1, 2]
res = almost_powerset(lst)

这将生成大小1,然后大小2等的所有组合,直到序列的总长度,然后使用chain连接它们。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29993029

复制
相关文章

相似问题

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