删除字符串的多个索引
怎样才能简单快速地从一个字符串中删除一系列的索引呢?
问题在于,如果我删除了某个位置的字符,字符串中的其他字符的位置就会发生变化。这时候,我也需要调整列表中所有索引的位置。这样做对吗?还是说有更简单的方法呢?
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])
。