Python通过索引从字符串中删除char的最佳方法

Alv*_*oao 12 python string substring python-2.7 python-3.x

我正在从字符串中删除一个字符,如下所示:

S = "abcd"
Index=1 #index of string to remove
ListS = list(S)
ListS.pop(Index)
S = "".join(ListS)
print S
#"acd"
Run Code Online (Sandbox Code Playgroud)

我确信这不是最好的方法.

编辑 我没有提到我需要操纵长度为~10 ^ 7的字符串大小.所以关心效率很重要.

有人能帮我吗.哪种pythonic方式呢?

Mad*_*ist 28

您可以使用切片绕过所有列表操作:

S = S[:1] + S[2:]
Run Code Online (Sandbox Code Playgroud)

或更一般地说

S = S[:Index] + S[Index + 1:]
Run Code Online (Sandbox Code Playgroud)

您可以在此处找到许多问题的答案(包括此类问题):如何使用python从字符串中删除字符?.但是,这个问题名义上是按价值而不是按指数删除.

  • @AlvaroJoao.没有"有效"的方法从字符串中删除元素.Python中的字符串是不可变的.这意味着您将不得不创建临时容器和新的最终字符串.如果你想要高效,你可以做一些像扩展`list`和实现自定义`__str__`方法. (2认同)
  • @AlvaroJoao然后保留一个字符列表而不是一个字符串,一个列表是可变的,不需要创建副本来改变. (2认同)

Iro*_*ist 6

切片是我能想到的最好和最简单的方法,这里有一些其他的选择:

>>> s = 'abcd'
>>> def remove(s, indx):
        return ''.join(x for x in s if s.index(x) != indx)

>>> remove(s, 1)
'acd'
>>> 
>>> 
>>> def remove(s, indx):
        return ''.join(filter(lambda x: s.index(x) != 1, s))

>>> remove(s, 1)
'acd'
Run Code Online (Sandbox Code Playgroud)

请记住,索引是从零开始的。


min*_*bro 6

您可以将索引字符替换为“”。

str = "ab1cd1ef"
Index = 3
print(str.replace(str[Index],"",1))
Run Code Online (Sandbox Code Playgroud)

  • 对于“Index = 2”,这不会按预期工作,因为它还会删除“5”处的值。 (6认同)
  • 修改了我的答案,现在 Index = 2 将被照顾,请投票..谢谢 (2认同)