【问题标题】:Flattening unknown nesting level of list using looping in Python在 Python 中使用循环展平列表的未知嵌套级别
【发布时间】:2022-10-13 06:33:32
【问题描述】:

我需要使用循环解决以下问题。

陈述

您的输入是具有未知嵌套级别的列表列表。可能像:

[
    [1, 2],
    [
        3,
        [4, 5],
    ],
    6,
    7,
]

您的挑战是将其重新塑造成一个这样的列表:

[1, 2, 3, 4, 5, 6, 7]

我的代码是:

import json

data = json.loads(input())
#WRITE YOUR CODE HERE 
list_data = list(data) 
flat_list = [item for items in list_data for item in items] 
print(flat_list)

TypeError:“int”对象不可迭代

【问题讨论】:

  • 不要使用列表理解来执行此操作,它不会起作用。您将需要递归(或使用堆栈迭代)
  • 你能提供一些代码吗?
  • 这回答了你的问题了吗? How to make a flat list from nested lists?

标签: python python-3.x list loops


【解决方案1】:

尝试递归方法:

lst = [[1, 2],[3,[4, 5],],6,7]

def flat_list(lst, res):
    for l in lst:
        if isinstance(l, list):
            flat_list(l, res)
        else:
            res.append(l)
            
result = []
flat_list(lst, result)
print(result)

输出:

[1, 2, 3, 4, 5, 6, 7]

更新: (使用没有递归方法的循环)

lst = [[1, 2],[3,[4, 5],],6,7]

res = []
for l in lst:
    tmp = [l]
    while tmp != []:
        for i in tmp:
            if isinstance(i, list):
                for j in i:
                    tmp.append(j)
            else:
                res.append(i)
            tmp = tmp[1:]
print(res)
# [1, 2, 3, 4, 5, 6, 7]

【讨论】:

  • 问题是我不应该使用函数和递归
  • @AlbinaHakobyan,那么你想如何解决这个问题?使用图书馆?
  • 问题出在循环部分,所以我猜是循环
  • @AlbinaHakobyan,请参阅更新。这对你有帮助吗?
【解决方案2】:

这是一种基于堆栈的方法:

lst = [[1, 2], [3, [4, 5], ], 6, 7]

stack = lst[::-1]
res = []

while stack:
    item = stack.pop()
    if isinstance(item, list):
        for x in item[::-1]:
            stack.append(x)
    else:
        res.append(item)

print(res)

【讨论】:

    猜你喜欢
    • 2021-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-19
    • 1970-01-01
    • 2018-06-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多