在Python中删除特定索引处的字符

73

我有一个字符串中包含两个 "0" (str),我希望仅删除索引为4的 "0" (str)。

我尝试使用 .replace 方法,但显然这将删除所有的 "0",而我找不到一个函数可以帮助我仅删除位置为4的字符。

有人能给我一点提示吗?

8个回答

109
使用切片,重建字符串并排除您想要删除的索引:
newstr = oldstr[:4] + oldstr[5:]

25

顺带一提,replace 不必要将所有的零都移动。如果您只想删除第一个,则可以将 count 指定为 1:

'asd0asd0'.replace('0','',1)

输出:

'asdasd0'


10
如果您只想替换索引为7的位置上的数字0,该怎么办? - Mad Physicist

19

这是我为任意字符串s和任意索引i提供的通用解决方案:

def remove_at(i, s):
    return s[:i] + s[i+1:]

7

另一种选项是使用列表推导和join函数:

''.join([_str[i] for i in xrange(len(_str)) if i  != 4])

1
我最喜欢这个,因为它可以被概括化...我的问题通过 ''.join([x for x in _str if x not in forbidden_chars]) 得到了解决。 - Brandon Kuczenski

6
切片是有效的方法(也是首选方法),但如果需要更多操作,使用枚举也是一种替代选择(不过转换为列表也无妨):
>>> a = '123456789'
>>> b = bytearray(a)
>>> del b[3]
>>> b
bytearray(b'12356789')
>>> str(b)
'12356789'

3
rem = lambda x, unwanted : ''.join([ c for i, c in enumerate(x) if i != unwanted])
rem('1230004', 4)
'123004'

1
def remove_char(input_string, index):
    first_part = input_string[:index]
    second_part = input_string[index+1:]
    return first_part + second_part

s = 'aababc'
index = 1
remove_char(s,index)

零基索引。

0

尝试这段代码:

s = input() 
a = int(input()) 
b = s.replace(s[a],'')
print(b)

7
这个问题已经五年了 :/ 虽然这可能回答了作者的问题,但它缺少一些解释性的词语和文档链接。裸代码片段没有一些相关的短语是不太有帮助的。请编辑你的回答。 - hellow
这将替换所有s[a]的出现。 - Sourajyoti Datta

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接