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

元组的子元组
EN

Stack Overflow用户
提问于 2014-01-27 15:27:10
回答 2查看 667关注 0票数 7

我想提出以下几点:

代码语言:javascript
复制
(('A',), ('B',), ('C',), ('D',))
(('A',), ('B',), ('C','D'))
(('A',), ('B','C'), ('D',))
(('A',), ('B','C','D'))
(('A','B'), ('C',), ('D',))
(('A','B'), ('C','D'))
(('A','B','C'), ('D',))
(('A','B','C','D'),)

调用sub_combinations(('A', 'B', 'C', 'D'))

这是我的尝试,但不起作用:

代码语言:javascript
复制
def sub_combinations(segment):
   for i in range(1, len(segment)):
      for j in sub_combinations(segment[i:]):
         yield segment[:i]+j 
      yield segment 

但我觉得我走对了路。

此外,我还想使用第二个名为极限的参数来限制子元组的大小,例如,sub_combinations(('A', 'B', 'C', 'D'), 2)会给出:

代码语言:javascript
复制
(('A',), ('B',), ('C',), ('D',))
(('A',), ('B',), ('C','D'))
(('A',), ('B','C'), ('D',))
(('A','B'), ('C',), ('D',))
(('A','B'), ('C','D'))

我在用python 3。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-27 15:42:47

句柄大小写-当segment为空时:

代码语言:javascript
复制
def sub_combinations(segment, size=0):
    if segment == ():
        yield ()
        return
    stop = min(size or len(segment), len(segment))
    for i in range(1, stop + 1):
        for j in sub_combinations(segment[i:], size):
            yield (segment[:i],) + j

示例用法:

代码语言:javascript
复制
>>> for x in sub_combinations(('A', 'B', 'C', 'D')):
...     print(x)
...
(('A',), ('B',), ('C',), ('D',))
(('A',), ('B',), ('C', 'D'))
(('A',), ('B', 'C'), ('D',))
(('A',), ('B', 'C', 'D'))
(('A', 'B'), ('C',), ('D',))
(('A', 'B'), ('C', 'D'))
(('A', 'B', 'C'), ('D',))
(('A', 'B', 'C', 'D'),)

代码语言:javascript
复制
>>> for x in sub_combinations(('A', 'B', 'C', 'D'), 2):
...     print(x)
...
(('A',), ('B',), ('C',), ('D',))
(('A',), ('B',), ('C', 'D'))
(('A',), ('B', 'C'), ('D',))
(('A', 'B'), ('C',), ('D',))
(('A', 'B'), ('C', 'D'))
票数 8
EN

Stack Overflow用户

发布于 2014-01-27 15:48:41

如果您还可以使用列表而不是元组(或者不害怕以后对它们进行转换),您可以使用以下方法:

代码语言:javascript
复制
def subtuples(t):
  for i in range(1<< (len(t)-1)):
    result = [ [ t[0] ] ]
    for j in range(len(t)-1):
      if (1<<j) & i:
        result[-1].append(t[j+1])
      else:
        result.append([ t[j+1] ])
    yield result

for x in subtuples(('a', 'b', 'c', 'd')):
  print(x)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21384752

复制
相关文章

相似问题

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