gpt4 book ai didi

python - 解包 n 级嵌套列表

转载 作者:太空宇宙 更新时间:2023-11-04 09:40:02 26 4
gpt4 key购买 nike

假设,我有一个列表,

[(1,2), (3, 4)].

如果列表中的所有元素都是元组,我将打印 1 + 2 和 3 + 4。但是,如果任何一个元素也是一个列表,那么我将 1 加到内部列表的每个元素,并将该内部列表的每个元素附加到父列表。例如。

list = [(1,2), [(3, 4), (5, 6)]], 

成为

[(1, 2), (3, 4, 1), (5, 6, 1)].

同样,如果内部列表有一个列表作为元素,我们重复同样的事情。例如。

[(1,2), [(3, 4), (5, 6), [(7, 8)]]] 

先变成

[(1,2), [(3, 4), (5, 6), (7, 8, 1)]] 

然后终于变成了,

[(1,2), (3, 4, 1), (5, 6, 1), (7, 8, 1, 1)].

我如何对这样一个列表执行此过程,其嵌套级别(如列表中列表中的列表......)未知?

我用来生成这个列表的代码如下:

def possible_sums(a):
if a == 2:
return [(1, 1)]
list_l = list(((a - 1, 1), ))
list_l.append(possible_sums(a-1))
return list_l


print(possible_sums(8))

最佳答案

此解决方案使用嵌套生成器。我们遍历列表中的项目,检查它们的类型。每当我们看到一个 list 时,我们都会对该列表递归调用 flatten,并将 1 添加到每个输出的末尾。如果 item 是一个元组,我们就让出它。然后在 flatten 之外,我们遍历生成器以构建列表。

def flattener(lst):
for item in lst:
if isinstance(item, list):
gen = flattener(item)
for item in gen:
yield item + (1,)
elif isinstance(item, tuple):
yield item


print(list(flattener([(1,2), [(3, 4), (5, 6), [(7, 8)]], [(5, 6, 7), [(1, 2)]]])))
# [(1, 2), (3, 4, 1), (5, 6, 1), (7, 8, 1, 1), (5, 6, 7, 1), (1, 2, 1, 1)]

关于python - 解包 n 级嵌套列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52079613/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com