鱼C论坛

 找回密码
 立即注册
查看: 560|回复: 4

[已解决]list.remove之未解之谜

[复制链接]
发表于 2021-9-6 13:16:57 | 显示全部楼层 |阅读模式

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

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

x
zimu='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
shuzi='0123456789'
fu='~!@#$%^&*()_=-/,.?<>;:[]{}|\\'
A=input('请输入需要检查的密码组合:')
listA=[]
for i in A:#将字符串转化成列表,方便操作。
    listA.append(i)
listB=listA[:]

for y in listB:#去除字母
    if y in zimu:
        listB.pop(listB.index(y))
for t in listB :#去除数字
    if t in shuzi:
        listB.remove(t)

run:
请输入需要检查的密码组合:xsax4545
>>> listB
['s', 'x', '5', '5']
>>>
========================== RESTART: D:/python/9.6测试.py =========================
请输入需要检查的密码组合:nxwed34r
5
>>> listB
['x', 'e', '4']
>>>
========================== RESTART: D:/python/9.6测试.py =========================
请输入需要检查的密码组合:saxwf3445
>>> listB
['a', 'w', '4', '5']
>>>

so他这个删除是按照什么来的
随机的吗???????、
最佳答案
2021-9-6 13:28:21
用 for 循环遍历的时候最好不要删除元素
例如:
>>> a = [2,4,6,8,10,12,14,16,18,20]
>>> for i in a:
        if i % 2 == 0:
                a.remove(i)

                
>>> print(a)
[4, 8, 12, 16, 20]

因为你遍历的时候把这个元素删除了,那么下一个元素就会顶上来,你遍历的下一个元素将会是原本下一个的后面那个。
微信图片_20210823000421.png
微信图片_20210906002330.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-9-6 13:28:21 | 显示全部楼层    本楼为最佳答案   
用 for 循环遍历的时候最好不要删除元素
例如:
>>> a = [2,4,6,8,10,12,14,16,18,20]
>>> for i in a:
        if i % 2 == 0:
                a.remove(i)

                
>>> print(a)
[4, 8, 12, 16, 20]

因为你遍历的时候把这个元素删除了,那么下一个元素就会顶上来,你遍历的下一个元素将会是原本下一个的后面那个。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-6 13:46:37 | 显示全部楼层
你用for循环在原列表中remove的话
删除掉元素后会引起下标的变化
所以你用for循环遍历切片然后再remove就不会出错了
a = list(range(10))

for i in a[:]:
    a.remove(i)

print(a)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-6 13:49:56 | 显示全部楼层
盡量不要再循環遍歷裡面使用 remove() 或 pop() 函數,除非你有絕對自信不會弄錯(因為遍歷會直接影響索引位置,而 remove() 或 pop() 函數是針對索引位置做改變,所以你根本不知道 remove() 對應哪些位置)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2021-9-6 18:37:05 | 显示全部楼层
逃兵 发表于 2021-9-6 13:46
你用for循环在原列表中remove的话
删除掉元素后会引起下标的变化
所以你用for循环遍历切片然后再remove就 ...

这波可以!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-13 10:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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