从嵌套列表中检索值

时间:2014-05-18 06:42:40

标签: python list

我有一个包含值

的列表b
(0,3,[(1,0),(0,-1)])

我将如何重复遍历此列表,以便从外部列表和元组中获取值? 我目前的想法是使变量等于b [0]和b [1],因为这不会扩展,它只会保持2个值。然而,元组列表可以扩展,所以我将如何通过列表来获取元组?

感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

您可以通过定义自定义方法来实现:

b = (0, 3, [(1,0),(0,-1)])

def print_list(l):
    for i in l:
        if isinstance(i, list) or isinstance(i, tuple):
            print_list(i)
        else:
            print i

>>> print_list(b)
0
3
1
0
0
-1

答案 1 :(得分:0)

我知道,你要求迭代,但是如果结构(嵌套的元组,列表和元组)具有固定长度,那么你可以使用解包,这允许在一个步骤中将值分配给某个变量。

>>> data = (0,3,[(1,0),(0,-1)])
>>> a, b, ((x1, y1), (x2, y2)) = data
>>> a
0
>>> b
3
>>> x1
1
>>> y1
0
>>> x2
0
>>> y2
-1

答案 2 :(得分:0)

如果您使用的是Python 3.3+,则可以执行以下操作:

def flatten(l):
    for i in l:
        if hasattr(i, '__iter__'):
            yield from flatten(i)
        else:
            yield i

比调用方法:

nested_list = (0,3,[(1,0),(0,-1)])
for i in flatten(nested_list):
    print(i)

在低于3.3的Python版本中,你不能使用'yield from',而是必须这样做:

def flatten(l):
    for i in l:
        if hasattr(i, '__iter__'):
            for i2 in flatten(i):
                yield i2
        else:
            yield i