微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么 Python 中这段代码中的最终列表为空?

如何解决为什么 Python 中这段代码中的最终列表为空?

我已经用 Python 编写了这段代码来创建一个嵌套的 list,但是为什么在第二种情况下最终列表是空的?

在这种情况下,list 不为空:

代码

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


def square(x):
    return x*x


def cube(x):
    return x*x*x


func_list = [square,cube]
final_2 = []

for i in range(10):
    var_list = list(map(lambda x: x(i),func_list))
    final_2.append(var_list)
print(final_2)

输出

[[0,0],[1,1],[4,8],[9,27],[16,64],[25,125],[36,216],[49,343],[64,512],[81,729]]

现在,当我在每次迭代中清除 var_list 时(虽然它应该会影响 final_2)然后输出为空!!

代码

list_of_items = [1,func_list))
    final_2.append(var_list)
    var_list.clear()
print(final_2)

输出

[[],[],[]]

如果附加列表充当 pointer,那么为什么在第一种情况下最终列表没有改变,因为 var_list 在每次迭代中都在改变,clear() 做了什么到最后变成空的列表?

解决方法

您需要追加 var_list 的副本,而不是 var_list 本身,因为您在追加后清除 var_list。

from copy import copy

#########
#your code here
#########

for i in range(10):
    var_list = list(map(lambda x: x(i),func_list))
    final_2.append(copy(var_list))
    var_list.clear()
,

只是不要清除列表。你为什么要这样做?

for i in range(10):
    var_list = list(map(lambda x: x(i),func_list))
    final_2.append(var_list)

你第二次做对了。

实际上,您根本不需要为列表命名:

for i in range(10):
    final_2.append(list(map(lambda x: x(i),func_list)))

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。