Python字符串超出索引

Python字符串超出索引,python,string,indexing,Python,String,Indexing,我正在尝试删除“X”和X之前的字符,这是我的代码 s = input() for i in range(len(s)): if s[i] == 'X': s = s.replace("X", "") s = s.replace(s[i], "") 我出了索引错误 if s[i] == 'X': IndexError: string index out of range 这里的问题是什么?如何解决?解决方案 f= [] x = input() f

我正在尝试删除“X”和X之前的字符,这是我的代码

s = input()
for i in range(len(s)):
    if s[i] == 'X':
        s = s.replace("X", "")
        s = s.replace(s[i], "")
我出了索引错误

    if s[i] == 'X':
IndexError: string index out of range
这里的问题是什么?如何解决?

解决方案

f= []
x = input()
for i in range(len(x)-1):
    if x[i+1]=='X' or x[i]=='X':
        continue
    else:
        f.append(x[i])

final = ''.join(f)  


解决方案

f= []
x = input()
for i in range(len(x)-1):
    if x[i+1]=='X' or x[i]=='X':
        continue
    else:
        f.append(x[i])

final = ''.join(f)  



您可以使用正则表达式:

import re
s = "aXbcXd" #example string
s = re.sub(".?X", "", s)
print(s)
#output: bd

您可以使用正则表达式:

import re
s = "aXbcXd" #example string
s = re.sub(".?X", "", s)
print(s)
#output: bd
解决方案:

s = input()
ls = len(s)
x_pos = []
for i in range(ls):
    if s[i] == 'X':
        if i != 0:
            x_pos.append(i - 1)
            x_pos.append(i)
        else:
            x_pos.append(i)
new_s = ''
for j in range(ls):
    if j not in x_pos:
        new_s += s[j]

print(new_s)
s = input()
def removeX(s):
    pos = s.find('X')
    if pos == -1:
        print(s)
        return
    elif pos == 0:
        s = s[pos+1:]
    else:
        s = s[:pos-1]+s[pos+1:]
    removeX(s)

removeX(s)
解决方案:

s = input()
ls = len(s)
x_pos = []
for i in range(ls):
    if s[i] == 'X':
        if i != 0:
            x_pos.append(i - 1)
            x_pos.append(i)
        else:
            x_pos.append(i)
new_s = ''
for j in range(ls):
    if j not in x_pos:
        new_s += s[j]

print(new_s)
s = input()
def removeX(s):
    pos = s.find('X')
    if pos == -1:
        print(s)
        return
    elif pos == 0:
        s = s[pos+1:]
    else:
        s = s[:pos-1]+s[pos+1:]
    removeX(s)

removeX(s)

在我看来,解决这个问题的最好方法是使用正则表达式。另一种方法可以是这样。
解决方案:

s = input()
def removeX(s):
    pos = s.find('X')
    if pos == -1:
        print(s)
        return
    elif pos == 0:
        s = s[pos+1:]
    else:
        s = s[:pos-1]+s[pos+1:]
    removeX(s)

removeX(s)

在我看来,解决这个问题的最好方法是使用正则表达式。另一种方法可以是这样。
解决方案:

s = input()
def removeX(s):
    pos = s.find('X')
    if pos == -1:
        print(s)
        return
    elif pos == 0:
        s = s[pos+1:]
    else:
        s = s[:pos-1]+s[pos+1:]
    removeX(s)

removeX(s)

不要从正在迭代的字符串中删除字符,而是创建一个不包含这些字符的新字符串。那么解决此问题的最佳方法是什么?@MarkMeyer是的,我可以一次删除所有X,但我在每个X之前删除谁的字符?不要从正在迭代的字符串中删除字符,创建一个没有这些字符的新字符串。那么解决这个问题的最佳方法是什么?@MarkMeyer是的,我可以一次删除所有X,但在每个X之前删除谁的字符?是的,它可以工作,但如果有多个X不能工作!请检查上述解决方案。是的,它可以工作,但如果有多个X不工作!请检查上面的解决方案。谢谢你,效果很好!但是我有一个问题,“?”是指X之前的字符???”,在正则表达式中是指任何字符,“?”是指字符是可选的(如果X在字符串的开头),谢谢,这很好用!但是我有一个问题,“?”是指X之前的字符???”,在正则表达式中是指任何字符,“?”是指字符是可选的(如果X在字符串的开头),它可以工作谢谢!但是我认为它比其他解决方案慢,但是谢谢!它很管用,谢谢!但是我认为它比其他解决方案慢,但是谢谢!