gpt4 book ai didi

python - 如何在python中删除字符串中字符的所有实例?

转载 作者:IT老高 更新时间:2023-10-28 20:23:42 25 4
gpt4 key购买 nike

如何删除该字符串中某个字符的所有实例?这是我的代码:

def findreplace(char, string):
place = string.index(char)
string[place] = ''
return string

但是,如果我运行它,会发生以下情况:

>>> findreplace('i', 'it is icy')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 3, in findreplace
TypeError: 'str' object does not support item assignment

这是为什么?

最佳答案

字符串在 Python 中是不可变的,这意味着一旦创建了字符串,就无法更改字符串的内容。如果需要更改它,将使用更改创建一个新的字符串实例。

考虑到这一点,我们有很多方法可以解决这个问题

  1. 使用 str.replace ,

    >>> "it is icy".replace("i", "")
    't s cy'
  2. 使用 str.translate ,

    >>> "it is icy".translate(None, "i")
    't s cy'
  3. 使用正则表达式,

    >>> import re
    >>> re.sub(r'i', "", "it is icy")
    't s cy'
  4. 使用理解作为过滤器,

    >>> "".join([char for char in "it is icy" if char != "i"])
    't s cy'
  5. 使用 filter功能

    >>> "".join(filter(lambda char: char != "i", "it is icy"))
    't s cy'

时间对比

def findreplace(m_string, char):
m_string = list(m_string)
for k in m_string:
if k == char:
del(m_string[m_string.index(k)])
return "".join(m_string)

def replace(m_string, char):
return m_string.replace("i", "")

def translate(m_string, char):
return m_string.translate(None, "i")

from timeit import timeit

print timeit("findreplace('it is icy','i')", "from __main__ import findreplace")
print timeit("replace('it is icy','i')", "from __main__ import replace")
print timeit("translate('it is icy','i')", "from __main__ import translate")

结果

1.64474582672
0.29278588295
0.311302900314

str.replacestr.translate 方法比接受的答案快 8 倍和 5 倍。

注意:理解方法和过滤方法预计会更慢,对于这种情况,因为它们必须创建列表,然后必须再次遍历它们才能构造一个字符串。而 re 对于单个字符替换来说有点矫枉过正。因此,它们都被排除在时间比较之外。

关于python - 如何在python中删除字符串中字符的所有实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22187233/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com