跳过嵌套元组中的所有其他值

时间:2018-11-06 00:07:34

标签: python

我正在尝试跳过嵌套列表中的所有其他列表。

filled_list = [1,2,3,[11,2,3,[111,2,3,[1111,2,3,4]]]]

def iterative_list(value):
    while isinstance(value[-1], list):
        a, *_, value = value
        yield a
    yield value[0]

z = iterative_list(filled_list)

我该怎么做,以便输出来自

[1, 11, 111, 1111]迭代解析列表。

[1, 111,]迭代解析列表。

我知道您可以用[:: 2]表示法跳过列表中的所有其他元素的概念,但是如何将其应用于嵌套列表?

3 个答案:

答案 0 :(得分:2)

将所有a附加到一个列表,然后将return附加到列表,例如:

def iterative_list(value):
   l=[]
   while isinstance(value[-1], list):
       a, *_, value = value
       l.append(a)
   l.append(a)
   return l[::2]

现在:

print(iterative_list(filled_list))

是:

[1, 111]

答案 1 :(得分:2)

您可以在无限循环中使用try-except块来获取内部内部列表,直到它捕获到TypeErrorIndexError

def iterative_list(value):
    while True:
        try:
            yield value[0]
            value = value[-1][-1]
        except (TypeError, IndexError):
            break

使list(iterative_list(filled_list))返回:

[1, 111]

答案 2 :(得分:1)

具有递归的生成器:

def iterative_list(value):
    try:
        yield value[0]
        yield from iterative_list(value[-1][-1])
    except TypeError:
        return  

示例:

list(iterative_list(filled_list))
Out: [1, 111]