What_Hope 发表于 2023-12-25 21:40:09

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

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

FishC 发表于 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 = 0
while i < len(a) - 1:
    if a.lower() == a.lower():
      a.pop(i)
      a.pop(i)# 注意,这里应该是 pop(i) 两次,而不是 pop(i) 一次
    else:
      i += 1

print(a)

在上面的代码中,我们使用了 `while` 循环而不是 `for` 循环,并且通过维护一个指针 `i` 来遍历列表。当发现相邻字符相同时,我们利用 `a.pop(i)` 两次来删除这两个字符。如果没有发现相邻字符相同,我们将指针 `i` 加 1 继续遍历下一个字符。

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

歌者文明清理员 发表于 2023-12-25 23:50:13

永远不要一边循环一边删元素!!!

s = input("请输入一个字符串:")
a=list(s)
for i in range(len(a)-1):
    print(i,a,s)
    if a.lower() == a.lower() and a!=a:
      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.lower() == a.lower() and a!=a:
      removed.extend()
for i in removed:
    a.pop(i)
s =''.join(a)
print(s)

aa8620101 发表于 2023-12-30 10:51:18

s = "QqWweWfFUuIIOPplL"
a=list(s)
b = a.copy()
for i in range(len(a)-1):
   
    if a.lower() == a.lower() and a!=a:
      print(f"b列表{b}")
      b.remove(a)
      b.remove(a)
      print("move掉后:",b)
print(b)
页: [1]
查看完整版本: 请问大佬,我这段代码里的a.pop(i)为毛老是报错啊qwq