鱼C论坛

 找回密码
 立即注册
查看: 2051|回复: 11

[已解决]各位大神,想问结果为什么能输出[1,2,3,4,5,0]呢?

[复制链接]
发表于 2020-12-9 21:33:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
各位大神,想问结果为什么能输出[1,2,3,4,5,0]呢?
list1.clear()后不应该是输出[]吗?后面的三条语句如何理解呢?谢谢。

list1 = [1,2,3,4,5,5,3,1,0]
temp = list1[ : ]
list1.clear()
for each in temp:
    if each not in list1:
        list1.append(each)
结果输出:
list1
[1, 2, 3, 4, 5, 0]
最佳答案
2020-12-9 22:27:40
本帖最后由 小伤口 于 2020-12-9 22:30 编辑
list1 = [1,2,3,4,5,5,3,1,0]
temp = list1[ : ]#list1拷贝到temp(list1被删除,拷贝的不会,拷贝相当于克隆,另一个不会受到影响)
list1.clear()#list1 变成空列表
for each in temp:#for循环temp里的内容
    if each not in list1:#如果循环temp的内容list1里面没有
        list1.append(each)#就将for循环temp的内容添加到list1里面
        #因为temp是拷贝的简而言之就是通过for循环再一次把list1拷贝的加入到被清空的lisr1里面
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-12-9 21:51:15 | 显示全部楼层
你是把list1这个列表拷贝了,名字叫做temp;你看你的for循环第一层判断的是temp这个列表里的元素,那list1里是空的,所以会把所有temp的元素输出
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-9 21:51:45 | 显示全部楼层
yf1 发表于 2020-12-9 21:51
你是把list1这个列表拷贝了,名字叫做temp;你看你的for循环第一层判断的是temp这个列表里的元素,那list1 ...

不知道你明白了没?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-9 22:27:40 | 显示全部楼层    本楼为最佳答案   
本帖最后由 小伤口 于 2020-12-9 22:30 编辑
list1 = [1,2,3,4,5,5,3,1,0]
temp = list1[ : ]#list1拷贝到temp(list1被删除,拷贝的不会,拷贝相当于克隆,另一个不会受到影响)
list1.clear()#list1 变成空列表
for each in temp:#for循环temp里的内容
    if each not in list1:#如果循环temp的内容list1里面没有
        list1.append(each)#就将for循环temp的内容添加到list1里面
        #因为temp是拷贝的简而言之就是通过for循环再一次把list1拷贝的加入到被清空的lisr1里面
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-9 22:44:04 | 显示全部楼层
本帖最后由 笨鸟学飞 于 2020-12-9 22:46 编辑
list1 = [1,2,3,4,5,5,3,1,0]
print('生成了列表list1,内存地址为:',id(list1))
list2 = list1
print('增加了列表引用list2,内存地址为:',id(list2))
temp = list1[ : ]
print('temp拷贝了列表list1,存放的内存地址为:',id(temp),'原列表list1内存地址为:',id(list1))
list1.clear()
print('清空了列表list1,list1列表现内容为:',list1,'内存地址为:',id(list1))
print('list2列表现内容为:',list2,'内存地址为:',id(list2))
for each in temp:
    if each not in list1:
        list1.append(each)
把代码跑一遍就明白了。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-10 11:05:42 | 显示全部楼层

你好,temp = list1[ : ],  temp应该是[1,2,3,4,5,5,3,1,0],对吧?最后结果应该是[1,2,3,4,5,5,3,1,0],为什么是[1,2,3,4,5,0]呢?剩下的去哪里了啊,谢谢。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-10 11:07:45 | 显示全部楼层
zrus116 发表于 2020-12-10 11:05
你好,temp = list1[ : ],  temp应该是[1,2,3,4,5,5,3,1,0],对吧?最后结果应该是[1,2,3,4,5,5,3,1,0], ...

是因为for循环吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-10 11:12:43 | 显示全部楼层
zrus116 发表于 2020-12-10 11:05
你好,temp = list1[ : ],  temp应该是[1,2,3,4,5,5,3,1,0],对吧?最后结果应该是[1,2,3,4,5,5,3,1,0], ...
list1 = [1,2,3,4,5,5,3,1,0]
temp = list1[ : ]
list1.clear()
for each in temp:
    if each not in list1:#因为这有个判断意思是temp的内容是否在list1里面
     #因为有两个5,3,1第一个5,3,1就在list1里面了所以到下一个5,3,1的时候if each not in list1就不成立,自然就只有一个5,3,1
        list1.append(each)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-10 11:43:46 | 显示全部楼层

你好,我还是不太明白,比较笨,见谅。
temp = list1[ : ]后,temp是[1,2,3,4,5,5,3,1,0], list1.clear后,list1应该是[], for循环后,temp应该全部到list1里面啊。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-10 11:53:39 | 显示全部楼层
zrus116 发表于 2020-12-10 11:43
你好,我还是不太明白,比较笨,见谅。
temp = list1[ : ]后,temp是[1,2,3,4,5,5,3,1,0], list1.clear ...

list1 = [1,2,3,4,5,5,3,1,0]
temp = list1[ : ]
list1.clear()
for each in temp:
    
    list1.append(each)
这样才会把temp的内容全部打印到list1里面去
所以造成差别的原因在于if each not in list1
模拟一下运行就是:1不在list1里,执行if条件语句2,3,4,5一样。这时又有一个5,而之前已经有个5了,所以不会i执行if之后的语句。3,1同样的道理
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-10 13:10:41 | 显示全部楼层
小伤口 发表于 2020-12-10 11:53
这样才会把temp的内容全部打印到list1里面去
所以造成差别的原因在于if each not in list1
模拟一 ...

1为什么不在list1呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-10 13:51:36 | 显示全部楼层
zrus116 发表于 2020-12-10 13:10
1为什么不在list1呢?

1也有两个呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-6 20:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表