happy_zl 发表于 2021-6-1 17:42:23

求助:关于列表 pop()方法的使用

代码如下:

name = ['lili', 'lilian', 'lisa', 'rose']

name.insert(0, 'bob')
name.insert(4, 'summer')
name.append('apple')

print(name)

for each in name:
    print(name.pop(), ', I am sorry')

运行结果如下:

['bob', 'lili', 'lilian', 'lisa', 'summer', 'rose', 'apple']
apple , I am sorry
rose , I am sorry
summer , I am sorry
lisa , I am sorry
['bob', 'lili', 'lilian']

疑惑:

为啥列表中 还保存三个元素不应该是全部删除了吗?????

kogawananari 发表于 2021-6-1 17:45:10

for each in name遍历时有惰性

改成for each in name[:]

Aries-H 发表于 2021-6-1 18:54:23

name = ['lili', 'lilian', 'lisa', 'rose']

name.insert(0, 'bob')
name.insert(4, 'summer')
name.append('apple')

print(name)

for each in range(len(name)):
    print(name.pop(), ', I am sorry')

我觉得你是想做到这个效果吧

Twilight6 发表于 2021-6-1 18:58:41


你 for 循环过程中,name 列表被循环时,内部的元素被移除

而 for 循环的索引值不会改变,依旧照就循环的索引直到 for 循环 name 列表索引超出 name 列表长度,则退出循环

这也就导致循环过程中,有些元素因元素进出而改变的索引值而未被 for 循环遍历到

dragon_xiao 发表于 2021-6-1 20:19:27

['bob', 'lili', 'lilian', 'lisa', 'summer', 'rose', 'apple']

当for循环 循环到lisa 后,lisa 被删除,然后继续第五次循环时,pop()函数发现第五次循环没有找到删除的值,程序终止。

happy_zl 发表于 2021-6-2 11:35:42

Twilight6 发表于 2021-6-1 18:58
你 for 循环过程中,name 列表被循环时,内部的元素被移除

而 for 循环的索引值不会改变,依旧照就循 ...

for each in name:
这句代码咋理解
我之前理解的是 遍历name 列表中的所有元素
但是现在感觉好像不是哎

Twilight6 发表于 2021-6-2 12:11:46

happy_zl 发表于 2021-6-2 11:35
for each in name:
这句代码咋理解
我之前理解的是 遍历name 列表中的所有元素



for 按照下标取出元素

比如若此时已经循环到第三个元素,那么此时索引下标为 2 (因为从 0 开始索引),下个循环时索引下标就为 3

此时若索引值未超过 可迭代对象总长度,那么循环会继续进行

而此时若你将索引为 0 元素删去,会导致列表中后续元素索引值都减 1,但你循环索引的下标还是为 3 所以导致 for 循环“漏了” 新索引值为 2 的元素

BanCan笑 发表于 2021-6-2 12:11:47

pop()函数不指定index是从-1开始的,就是从最后开始

name = ['lili', 'lilian', 'lisa', 'rose']

name.insert(0, 'bob')
name.insert(4, 'summer')
name.append('apple')

print(name)

# for each in range(len(name)):
#   print(name.pop(), ', I am sorry')
print('+'*100)
for each in name:
    print(each)
    print(name.pop(), ', I am sorry')
    print('被删除的name:',name)
    print('-'*20)
print('+'*100)












代码运行结果:
['bob', 'lili', 'lilian', 'lisa', 'summer', 'rose', 'apple']
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
bob
apple , I am sorry
被删除的name: ['bob', 'lili', 'lilian', 'lisa', 'summer', 'rose']
--------------------
lili
rose , I am sorry
被删除的name: ['bob', 'lili', 'lilian', 'lisa', 'summer']
--------------------
lilian
summer , I am sorry
被删除的name: ['bob', 'lili', 'lilian', 'lisa']
--------------------
lisa
lisa , I am sorry
被删除的name: ['bob', 'lili', 'lilian']
--------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


吐槽下不能复制图片上传啊

dsszt 发表于 2021-6-4 16:54:49

pop()不是弹出并允许使用吗?

小帅学python 发表于 2021-6-13 17:52:29

pop()是默认删除最后一位的,然后你for是遍历当前列表的长度,前面下标在增加,你列表的长度又在变小,所以你遍历的不是一个完整的列表
页: [1]
查看完整版本: 求助:关于列表 pop()方法的使用