删除字符串中的一个字符

2024-03-28 19:27:07 发布

您现在位置:Python中文网/ 问答频道 /正文

基本上,我想删除一个字符串中的一个字符,如果它出现了多次。在

例如:-如果我有一个单词abaccea和字符'a',那么函数的输出应该是baccea,abccee,abccea。在

我读到我可以为a和空字符串生成maketrans,但它会替换字符串中的每个a。在

除了在列表中记下所有的位置然后替换和生成单词之外,有没有一种有效的方法可以做到这一点??在


Tags: 方法函数字符串列表字符单词记下maketrans
3条回答

你可以试试下面的脚本。它提供了一个简单的函数来执行您的要求。列表理解的使用很值得学习。在

#!/usr/bin/python

word = "abaccea"
letter = "a"

def single_remove(word, letter):
    """Remove character c from text t one at a time
    """
    indexes = [c for c in xrange(len(word)) if word[c] == letter]
    return [word[:i] + word[i + 1:] for i in indexes]

print single_remove(word, letter)

返回['baccea', 'abccea', 'abacce']

干杯

下面是一个快速的方法:

In [6]: s = "abaccea"
In [9]: [s[:key] + s[key+1:] for key,val in enumerate(s) if val == "a"]
Out[10]: ['baccea', 'abccea', 'abacce']

通过简单地将方括号替换为圆括号,可以将其转换为生成器。在

我想说你的方法听起来不错-这是一个相当有效的方法,读者会很清楚你在做什么。在

然而,一个稍微不那么优雅但可能更快的替代方法是使用^{}函数的start参数。在

i = 0
while True:
    j = word.find('a', i)
    if j == -1:
        break
    print word[:j] + word[j+1:]
    i = j + 1

find函数可能在C中得到了高度优化,因此与在Python中迭代字符串中的字符相比,这可能会提高性能。你是否想这样做取决于你是在追求效率还是优雅。我建议首先采用简单明了的方法,只有在性能分析表明效率是一个重要问题时才对其进行优化。在

以下是一些性能度量,表明使用find的代码可以运行得更快:

^{pr2}$

相关问题 更多 >