假设我有一个列表
[(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))
答案 0 :(得分:3)
此解决方案使用嵌套生成器。我们遍历列表中的项目,检查其类型。每当我们看到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)]
答案 1 :(得分:1)
include('functions.php');
upload($file, $path);