删除字符串的多个索引

10 投票
2 回答
5156 浏览
提问于 2025-04-18 04:20

怎样才能简单快速地从一个字符串中删除一系列的索引呢?

问题在于,如果我删除了某个位置的字符,字符串中的其他字符的位置就会发生变化。这时候,我也需要调整列表中所有索引的位置。这样做对吗?还是说有更简单的方法呢?

2 个回答

0

你可以使用内置的 bytearray 来实现这个功能。

def delete(string, indices):
    z = bytearray(string.encode())
    for i in sorted(indices, key=abs, reverse=True):
        del z[i]
    return z.decode()

delete('Hello world!', [0, -3])

'ello word!'

需要注意的是,这个方法只适用于 ASCII 字符串,也就是说,字符串中的每个字符都能一一对应到字节上。

15

字符串是不可变的,也就是说你不能直接从字符串中删除某个字符。

data = "Welcome"
del data[0]
# TypeError: 'str' object doesn't support item deletion

最好的方法是重新构建一个新的字符串,把你想要删除的字符去掉,然后把剩下的字符拼接在一起,像这样做:

data, indexes = "Welcome", {1, 3, 5}
print "".join([char for idx, char in enumerate(data) if idx not in indexes])
# Wloe

需要注意的是,indexes 是一组数字,因为用集合来查找比用列表要快。如果你有一个数字列表,比如 [1, 3, 5],想把它转换成集合,可以使用 set 函数,像这样 set([1, 3, 5])

撰写回答