Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从现有列表创建新的累积列表_Python_List_Loops - Fatal编程技术网

Python 从现有列表创建新的累积列表

Python 从现有列表创建新的累积列表,python,list,loops,Python,List,Loops,使用Python,我试图构建一个列表的累积列表,其中列表中的每个元素都会随着列表中前一个元素的值的数量而增长。下面的代码示例应该更清楚 my_list = [[1,2,3],[4,5,6],[7,8,9]] list_new = [] final_list = [] for i in my_list: list_new += i final_list.append(list_new) 我正试图得到一个结果 [ [1,2,3] , [1,2,3,4,5,6] , [1,2,

使用Python,我试图构建一个列表的累积列表,其中列表中的每个元素都会随着列表中前一个元素的值的数量而增长。下面的代码示例应该更清楚

my_list = [[1,2,3],[4,5,6],[7,8,9]]
list_new = []
final_list = []

for i in my_list:
    list_new += i
    final_list.append(list_new)
我正试图得到一个结果

[
  [1,2,3]
, [1,2,3,4,5,6]
, [1,2,3,4,5,6,7,8,9]
]
但是我越来越

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

非常感谢你的帮助

您只需要创建一份新列表的副本并添加最终列表,而不是添加新列表本身

原因是列表是一种引用类型,因此附加到它将修改该列表引用的任何其他位置,因此,您将创建一个新列表

final_list.append(list_new[:])

或者,使用:


有一行是这样的:

result = [[element for sub in my_list[:i] for element in sub] for i, _ in enumerate(my_list, 1)]
result
#[[1, 2, 3]
# [1, 2, 3, 4, 5, 6]
# [1, 2, 3, 4, 5, 6, 7, 8, 9]]

问题是最终的列表包含对同一个新列表的三个引用。 相反,您希望在每次将列表推送到最终列表时克隆该列表。 你可以这样做

final_list.append(list(list_new))
总共:

my_list = [[1,2,3],[4,5,6],[7,8,9]]
list_new = []
final_list = []
for i in my_list:
  list_new += i
  final_list.append(list(list_new))

+=
将单个列表
list\u new
变为原位,然后重复将对该列表的引用添加到
final\u list
。您需要将新列表添加到
final\u list

my_list = [[1,2,3],[4,5,6],[7,8,9]]
list_new = []
final_list = []

for i in my_list:
    tmp = list_new + i
    final_list.append(tmp)
    list_new = tmp
my_list = [[1,2,3],[4,5,6],[7,8,9]]
list_new = []
final_list = []

for i in my_list:
    list_new += i
    final_list.append(list_new[:])
或者,与其创建一个新列表,然后将名称重新绑定到该列表中,不如继续更新
list\u new
,但在
final\u列表中添加一个副本

my_list = [[1,2,3],[4,5,6],[7,8,9]]
list_new = []
final_list = []

for i in my_list:
    tmp = list_new + i
    final_list.append(tmp)
    list_new = tmp
my_list = [[1,2,3],[4,5,6],[7,8,9]]
list_new = []
final_list = []

for i in my_list:
    list_new += i
    final_list.append(list_new[:])
或者,使用
itertools.accumulate
并停止自己担心累加器

from operator import add
from itertools import accumulate

my_list = [[1,2,3],[4,5,6],[7,8,9]]
final_list = list(accumulate(my_list, add))
您可以省略显式的
add
参数,因为默认情况下
accumulate
将使用该参数

final_list = list(accumulate(my_list))

add
操作符是不需要的(默认值)。啊,对。我把它和
sum
混淆了,其中
sum(我的清单)
会失败,但是
sum(我的清单,[])
会工作(因为
sum
需要一些帮助才能知道使用哪个
+
)。