我有一个元组元组。元组中的每个元组本身都是一个元组元组,对嵌套没有特别的限制。
我想把它变成一个包含所有元素的元组,而不是打印机将它们打印在屏幕上。
例如:
a = ( 1 , (2, 3), (4, (5), (6, 7, (8, 9))))
会变成:
( 1 , 2, 3, 4, 5, 6, 7, 8, 9 )
我可能错了,但我没有看到同样的问题。我对Python很陌生,所以我不知道是否有Python方法可以做到这一点(我本可以亲自去一个生成器)。
答案 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)