首页 > 解决方案 > 用于列表或子列表中的项目

问题描述

我有一个列表,其中可能包含也可能不包含更多子列表。我需要为列表中的每个项目以及列表中任何子列表中的每个项目运行一段代码。这就是我for现在的陈述:

for item in mylist:
    ...

什么是最有效的重写方法,所以item永远不是子列表之一,并且除了列表中的每个项目之外,代码将为所有子列表中的每个项目运行一次?

标签: pythonpython-3.xlistfor-loop

解决方案


有两种通用的方法可以做到这一点,或者递归:

def unroll_recursive(lst):
    for el in lst:
        if isinstance(el, list):
            yield from unroll_recursive(el)
        else:
            yield el

或迭代地

from collections import deque
def unroll_iterative(lst)
    q = deque(lst)
    while q:
        el = q.popleft()
        if isinstance(el, list):
            q.extend(el)
        else:
            yield el

推荐阅读