如何存储for循环中的列表,然后重用它



我正在编写一个程序,该程序使用某种公式从现有列表中生成一个新列表。然后,新生成的列表也会执行同样的操作。我遇到的问题是,我不知道如何存储所有生成的列表。

lst = [2, 2, 2, 2, 2, 2]
m = 0
c = 0
full_list = []
full_list.append(lst)
print(full_list)
while m <= 3:
for i in range(len(lst)):
c = 2 * lst[i]
lst[i] = c
full_list.append(lst)
m += 1
print(full_list)

我正在寻找的输出是:

[2, 2, 2, 2, 2, 2]
[[2, 2, 2, 2, 2, 2], [4, 4, 4, 4, 4, 4]]
[[2, 2, 2, 2, 2, 2, [4, 4, 4, 4, 4, 4], [8, 8, 8, 8, 8, 8]]

然而,我得到了:

[[2, 2, 2, 2, 2, 2]]
[[4, 4, 4, 4, 4, 4], [4, 4, 4, 4, 4, 4]]
[[8, 8, 8, 8, 8, 8], [8, 8, 8, 8, 8, 8], [8, 8, 8, 8, 8, 8]]

似乎当我将生成的列表附加到完整列表时,它会更新以前的所有条目。我该如何避免这种情况?除了append,还有其他命令吗?

注意:我知道这个特定的代码示例可以用numpy轻松完成,但我想在这里展示一个易于理解的简单示例,我不想在这里编写复杂的算法。但解决这里问题的解决方案将用我的原始代码解决问题。

试试这个:

lst = [2, 2, 2, 2, 2, 2]
full_list = []
full_list.append(lst)
while len(full_list) < 3:
print(full_list)
full_list.append( [ item *2 for item in full_list[-1] ] )
print(full_list)

这缩短了while循环逻辑,将while计数与您试图生成的列表的长度联系起来,并使用列表理解来生成新列表。

这里有另一种不用列表理解的方法:

lst = [2, 2, 2, 2, 2, 2]
full_list = [lst]
while len(full_list) <= 3:
# Creating an empty list to work with
working_list = []
for i in range(len(lst)):
# Updating the working variable with 2 * lst
working_list.append(2 * lst[i])
# Changing the original list to the updated version.
# That way a list of [4, 4, 4, 4, 4, 4] will be multiplied by 2 next.
lst = working_list
# Storing the updated version in a separate list of lists
full_list.append(working_list)
print(full_list)

有时,创建一个工作变量进行编辑,与原始变量分开,更容易使用。

最新更新