Python按索引从字符串中删除字符的最佳方法

Posted

技术标签:

【中文标题】Python按索引从字符串中删除字符的最佳方法【英文标题】:Python best way to remove char from string by index 【发布时间】:2016-10-30 05:27:51 【问题描述】:

我正在从这样的字符串中删除一个字符:

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

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

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

谁能帮帮我。哪种pythonic方式来做到这一点?

【问题讨论】:

@span 请注意这个问题。它不是重复的。 重复,请看链接问题的第一个答案。 非常重复。所有的答案也几乎是重复的(包括我自己的)。 投票支持重新打开,因为 OP 想要一个可行的解决方案来处理大约 10^7 个元素的序列 - 标记为重复的问题是针对“普通”字符串大小的。 @alvaro - 请改写您的问题以包含您预期的字符串大小。 (或完全问另一个问题) 【参考方案1】:

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

S = S[:1] + S[2:]

或更一般地

S = S[:Index] + S[Index + 1:]

您的问题的许多答案(包括这样的答案)都可以在这里找到:How to delete a character from a string using python?。然而,这个问题名义上是关于按值删除,而不是按索引。

【讨论】:

那是最有效的方法吗?似乎不是pythonic。就像我想要的那样工作。 你为什么关心最有效的方式?字符串的大小是多少?您多久从中删除一个字符? @AlvaroJoao。没有从字符串中删除元素的“有效”方法。 Python 中的字符串是不可变的。这意味着无论如何您都必须创建临时容器和新的最终字符串。如果您想要高效,您可以执行类似扩展list 并实现自定义__str__ 方法。 字符串大小 10^7。问题是寻找回文并删除 char 直到字符串变成回文所以我想我需要关心效率。 @AlvaroJoao 然后保留字符列表而不是字符串,列表是可变的,不需要创建副本来更改。【参考方案2】:

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

>>> 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'

记住索引是从零开始的。

【讨论】:

【参考方案3】:

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

str = "ab1cd1ef"
Index = 3
print(str.replace(str[Index],"",1))

【讨论】:

这对于Index = 2 将无法正常工作,因为它还会删除5 的值。 如果在替换中加1?将替换限制为一次。 @MadPhysicist 修改了我的答案,现在 Index = 2 将得到处理,请投票..谢谢 好的。如果我想替换Index = 5怎么办?我的观点是,在一般情况下,按值删除/替换永远不会是按索引删除/替换的安全替代方案,所以不要赞成。 @MadPhysicist 你是绝对正确的。你刚才明白了。【参考方案4】:
S = "abcd"
Index=1 #index of string to remove
S = S.replace(S[Index], "")
print(S)

希望对你有帮助!

【讨论】:

如果S = "zzzz",我收到empty,但它应该返回zzz @0Knowledge S.replace(S[index], "", 1)【参考方案5】:
def missing_char(str, n):

  n = abs(n)
  front = str[:n]   # up to but not including n
  back = str[n+1:]  # n+1 through end of string
  return front + back

【讨论】:

以上是关于Python按索引从字符串中删除字符的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章

Python基础之内置方法

根据字符的字符从句子数组中删除重复句子的最佳方法,空格无关紧要

从使用 MySQL _FETCH 设置的字符串中删除双引号的最佳方法是啥?

在 Python 中删除字符串中的多余字符

从 QString 中删除前导零的最佳方法

python 字符串提取信息方法总结