如何在Python中实现元组

时间:2014-01-04 17:14:40

标签: python tuples

我有一个元组元组。元组中的每个元组本身都是一个元组元组,对嵌套没有特别的限制。

我想把它变成一个包含所有元素的元组,而不是打印机将它们打印在屏幕上。

例如:

a = ( 1 , (2, 3), (4, (5), (6, 7, (8, 9))))

会变成:

( 1 , 2, 3, 4, 5, 6, 7, 8, 9 )

我可能错了,但我没有看到同样的问题。我对Python很陌生,所以我不知道是否有Python方法可以做到这一点(我本可以亲自去一个生成器)。

2 个答案:

答案 0 :(得分:2)

您可以使用隐性展平功能:

def flatten(seq):
  for x in seq:
    if isinstance(x, basestring):  # use isinstance(x, str) in python3
       yield x
       continue
    try:
      # in python >=3.3, can use the nifty "yield from", like: yield from flatten(x)
      for y in flatten(x):
        yield y
    except TypeError:
       yield x  # not iterable

print tuple(flatten(a))
=> (1, 2, 3, 4, 5, 6, 7, 8, 9)

请注意,在a初始化时,(5)相当于5。您可能想要的是一个大小为1的元组,它使用逗号创建,例如:(5,)

答案 1 :(得分:1)

您可以使用此递归函数:

a = ( 1 , (2, 3), (4, (5), (6, 7, (8, 9))))
b = []
def tup(x):
    if not(type(x) == tuple):
        b.append(x)
    else:
        for i in range(len(x)):
            tup(x[i])

tup(a)
print(b)