为了账号安全,请及时绑定邮箱和手机立即绑定

Python 中的列表分配/创建显示意外行为

Python 中的列表分配/创建显示意外行为

弑天下 2022-12-14 20:54:54
我正在玩弄一段代码,在此期间我偶然发现了 Python 的一些意外行为。我定义了一个列表如下:a = [1, 2, 3]用循环制作另一个列表:res = (item for item in a if a.count(item) > 0)print(list(res)) # [1, 2, 3] -- as expected -- Consider this is line 1后来我改变了第一个列表的初始值:a = [7, 2, 9]我原以为在创建之后res我所做的更改不会有任何变化,但令我惊讶的是,res 的值发生了变化。aresprint(list(res)) # prints [] -- Consider this as line 2更令人震惊的是打印的结果取决于第1行的打印语句,如果我在第1行注释掉打印语句然后第2行打印[2]有人可以向我解释这里发生了什么吗?
查看完整描述

2 回答

?
开心每一天1111

TA贡献1836条经验 获得超13个赞

res = (item for item in a if a.count(x) > 0)创建一个通过调用耗尽的生成器list(res)

当您调用下一个list(res)时,它返回空列表 -[]

考虑先创建一个列表,例如res = [item for item in a if a.count(x) > 0]


查看完整回答
反对 回复 2022-12-14
?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

好的,我想我明白了,我不是在用那个循环创建另一个列表,而是在创建一个叫做生成器的东西。

它只能转换为列表一次,这就是为什么如果我在第 1 行给出打印语句,它会打印 [] 的原因。

它会根据 a 的值修改自身,直到耗尽。


查看完整回答
反对 回复 2022-12-14
  • 2 回答
  • 0 关注
  • 76 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信