【问题标题】:Best way to iterate recursively into all nested array without knowing number of nested level?在不知道嵌套级别数的情况下递归迭代所有嵌套数组的最佳方法?
【发布时间】:2019-08-12 16:05:26
【问题描述】:

我正在使用 python 3,我使用 PyMongo。

PyMongo 允许我像这样迭代数据库中的集合:

List['tomato',['apple',['carpet','dishwasher','mister T',[... etc.. etc..]],'coke'],'pie']

我目前正在使用最多 4 个级别的 for 循环。这很难维护和理解。

所以我想在从第一个数组到最后一个嵌套数组的所有嵌套数组中递归迭代。

谢谢你:)

裘德

【问题讨论】:

  • 你想flatten your list然后迭代结果。
  • 如果你能展示你的代码,你的问题会更容易理解。
  • 欢迎来到 Stackoverflow,请阅读How To Ask。特别关注How To Create MCVE。确保使用适当的标签(编程语言、相关技术等)标记您的问题。您在发布一个好问题上付出的努力越多:一个易于阅读、理解并且是 on topic 的问题 - 它吸引相关人员的机会就越高,您会更快地获得帮助。祝你好运!
  • @Tomalak 正是我想要的谢谢 :) !

标签: python algorithm iteration


【解决方案1】:

如果您只是想展平您的列表,您可以使用下面的函数对其进行递归。每次遇到嵌套列表时都会调用自己,并不断将元素保存到最终返回的结果列表中。

def recurse(in_list):
    result=[]
    for e in in_list:
        if type(e)==list:
            result+=recurse(e)
        else:
            result+=[e]
    return result

创建函数后,您可以像这样使用它:

x=['tomato',['apple',['carpet','dishwasher','mister T'],'coke'],'pie']
recurse(x)

输出

['tomato', 'apple', 'carpet', 'dishwasher', 'mister T', 'coke', 'pie']

它只会处理嵌套列表,但您可以修改代码以处理其他类型(字典、集合等)

【讨论】:

    猜你喜欢
    • 2017-02-02
    • 2013-03-29
    • 2020-10-25
    • 1970-01-01
    • 2015-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多