zrus116 发表于 2020-12-9 21:33:36

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

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

list1 =
temp = list1[ : ]
list1.clear()
for each in temp:
    if each not in list1:
      list1.append(each)
结果输出:
list1

yf1 发表于 2020-12-9 21:51:15

你是把list1这个列表拷贝了,名字叫做temp;你看你的for循环第一层判断的是temp这个列表里的元素,那list1里是空的,所以会把所有temp的元素输出

yf1 发表于 2020-12-9 21:51:45

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

不知道你明白了没?

小伤口 发表于 2020-12-9 22:27:40

本帖最后由 小伤口 于 2020-12-9 22:30 编辑

list1 =
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里面

笨鸟学飞 发表于 2020-12-9 22:44:04

本帖最后由 笨鸟学飞 于 2020-12-9 22:46 编辑

list1 =
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)
把代码跑一遍就明白了。。。

zrus116 发表于 2020-12-10 11:05:42

小伤口 发表于 2020-12-9 22:27


你好,temp = list1[ : ],temp应该是,对吧?最后结果应该是,为什么是呢?剩下的去哪里了啊,谢谢。

zrus116 发表于 2020-12-10 11:07:45

zrus116 发表于 2020-12-10 11:05
你好,temp = list1[ : ],temp应该是,对吧?最后结果应该是, ...

是因为for循环吗?

小伤口 发表于 2020-12-10 11:12:43

zrus116 发表于 2020-12-10 11:05
你好,temp = list1[ : ],temp应该是,对吧?最后结果应该是, ...

list1 =
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)

zrus116 发表于 2020-12-10 11:43:46

小伤口 发表于 2020-12-10 11:12


你好,我还是不太明白,比较笨,见谅。
temp = list1[ : ]后,temp是, list1.clear后,list1应该是[], for循环后,temp应该全部到list1里面啊。

小伤口 发表于 2020-12-10 11:53:39

zrus116 发表于 2020-12-10 11:43
你好,我还是不太明白,比较笨,见谅。
temp = list1[ : ]后,temp是, list1.clear ...

list1 =
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同样的道理

zrus116 发表于 2020-12-10 13:10:41

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

1为什么不在list1呢?

小伤口 发表于 2020-12-10 13:51:36

zrus116 发表于 2020-12-10 13:10
1为什么不在list1呢?

1也有两个呀
页: [1]
查看完整版本: 各位大神,想问结果为什么能输出[1,2,3,4,5,0]呢?