Python 从现有列表创建新的累积列表
使用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,
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
需要一些帮助才能知道使用哪个+
)。