迭代Python中的嵌套元组

问题描述 投票:0回答:2

我是 python 新手,正在尝试找出如何迭代嵌套元组。

这是一个元组:

x=((1,2,('a', 'b', (6,9,7)), 6,('$','@')))

我正在尝试迭代,以便可以单独打印每个值,例如:

1
2
a
b
6
9
7
6
$
@

这是我的代码,请让我知道我在这里做错了什么:

x=((1,2,('a', 'b', (6,9,7)), 6,('$','@')))
f=0
for y in x:
   print(x[f])
   f = f+1
python loops tuples
2个回答
4
投票

你可以尝试用递归。检查元素是否是元组,如果是则递归调用函数,如果不是则打印它。

x=(((1,2,3,4),2,('a', 'b', (6,9,7)), 6,('$','@')))

def foo(a):
    for b in a:
        if isinstance(b,tuple):
            foo(b)
        else:
            print b
foo(x)

输出:

1
2
3
4
2
a
b
6
9
7
6
$
@

0
投票

对 Mohammad Yusuf 的 answer 进行了轻微修改,并进行了一些 QOL 更改:

  1. 深度跟踪/限制,要么是因为您只对达到一定深度的层感兴趣,要么是为了避免在非常深的嵌套元组上爆炸。
  2. 可配置的基于深度的打印缩进有助于说明结构。
def foo(a, depth=0, depth_lim=10, indent_size=1, indent_str="-"):
    # Set up indent and increment depth counter
    indent = indent_str * ((depth) * indent_size)
    depth += 1
    
    #Loop over elements and print if we're not at the depth limit
    if depth <= depth_lim:
        for b in a:
            if isinstance(b, tuple):
                foo(b, depth, depth_lim, indent_size, indent_str)
            else:
                print(indent + str(b))
    else:
        print("Depth limit reached (" + str(depth_lim) + 
              "). Increase depth_lim for deeper printing.")

使用示例:

test_tuple = ("a",(("c"),("d"),(("e"),("f"))), "b")
test_foo(test_tuple, depth_lim=3, indent_size=2, indent_str="-")

输出:

a
--c
--d
----e
----f
b
© www.soinside.com 2019 - 2024. All rights reserved.