鱼C论坛

 找回密码
 立即注册
查看: 1375|回复: 3

请问大佬,我这段代码里的a.pop(i)为毛老是报错啊qwq

[复制链接]
发表于 2023-12-25 21:40:09 | 显示全部楼层 |阅读模式

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

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

x
请问大佬,我这段代码里的a.pop(i)为毛老是报错啊qwq
s = input("请输入一个字符串:")
a=list(s)
for i in range(len(a)-1):
    if a[i].lower() == a[i+1].lower() and a[i]!=a[i+1]:
        a.pop(i)
        a.pop(i)
print(a)

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-25 21:40:21 | 显示全部楼层
首先,让我们来看看你的代码中出现的问题。在循环中,你使用了 `a.lower() == a.lower()` 来判断大小写是否相同,然后又用 `a!=a` 来判断字符串是否相等。这两个判断条件的逻辑上是无法满足的,因此代码中的 `a.pop(i)` 不会被执行。

其次,你在循环中使用了 `range(len(a)-1)`,这会导致循环不会访问到最后一个字符,因为 `range(x)` 生成的是从 0 到 x-1 的范围。

最后,当你在循环中使用 `a.pop(i)` 时,会导致列表的长度发生变化。这可能会导致索引超出范围的错误。我们可以改变一下思路来解决这个问题。

下面是对你的代码进行了一些修改和优化的版本:
s = input("请输入一个字符串:")a = list(s)i = 0while i < len(a) - 1:    if a[i].lower() == a[i+1].lower():        a.pop(i)        a.pop(i)  # 注意,这里应该是 pop(i) 两次,而不是 pop(i) 一次    else:        i += 1print(a)
在上面的代码中,我们使用了 `while` 循环而不是 `for` 循环,并且通过维护一个指针 `i` 来遍历列表。当发现相邻字符相同时,我们利用 `a.pop(i)` 两次来删除这两个字符。如果没有发现相邻字符相同,我们将指针 `i` 加 1 继续遍历下一个字符。

希望以上解答能够帮到你!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-25 23:50:13 | 显示全部楼层
永远不要一边循环一边删元素!!!
s = input("请输入一个字符串:")
a=list(s)
for i in range(len(a)-1):
    print(i,a,s)
    if a[i].lower() == a[i+1].lower() and a[i]!=a[i+1]:
        a.pop(i)
        a.pop(i)
print(a)
输入一个“Aaa”,结果就很明显了:前面的索引被删掉了,但是for循环的i没有减少(也做不到减少)。
2#的机器人说的方法(用while)也行,但是还有更好的方法
s = input("请输入一个字符串:")
a=list(s)
removed=[]
for i in range(len(a)-1):
    #print(i,a,s) # for debugging
    if a[i].lower() == a[i+1].lower() and a[i]!=a[i+1]:
        removed.extend([i,i+1])
for i in removed:
    a.pop(i)
s =''.join(a)
print(s)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2023-12-30 10:51:18 From FishC Mobile | 显示全部楼层
s = "QqWweWfFUuIIOPplL"
a=list(s)
b = a.copy()
for i in range(len(a)-1):
   
    if a[i].lower() == a[i+1].lower() and a[i]!=a[i+1]:
        print(f"b列表{b}")
        b.remove(a[i])
        b.remove(a[i+1])
        print("move掉后:",b)
print(b)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-14 15:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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