python - 从 String 中删除一个 char,更有效的方法是什么?

标签 python string performance python-2.7

<分区>

我目前正在通过在线类(class)学习 Python 2.7。其中一个问题是我必须从基于字符列表的字符串中删除一个字符。

我所做的是:

def getAvailableLetters(letters):

    alphabet = string.ascii_lowercase
    reduced_alphabet = ''

    for char in alphabet:
        if char not in lettersGuessed:
            reduced_alphabet += char

    return reduced_alphabet

我知道没有像字符串方法这样的东西可以直接从字符串中删除一个字符,因为它们是不可变的,所以我想到了这个。我已经成功提交了一个正确的答案,但我对它不太满意,因为我觉得有一种更有效的方法可以做到这一点。

最佳答案

最快的方法是在此处使用 str.translate:

>>> lettersGuessed = ['a', 'b', 'c']
>>> 'wedqwdasdasccdshjasdcas'.translate(None, ''.join(lettersGuessed))
'wedqwdsdsdshjsds'

如果 lettersGuessed 已经是一个字符串,则删除 ''.join 调用。

str.joinfilter 相比的计时结果,取自@thefourtheye 的解决方案:

def getAvailableLetters2(lettersGuessed):
    return string.ascii_lowercase.translate(None, lettersGuessed)

from timeit import timeit
print 'filter-->', timeit("getAvailableLetters('Welcome')", setup="from __main__ import getAvailableLetters")
print '.join-->', timeit("getAvailableLetters1('Welcome')",setup="from __main__ import getAvailableLetters1")
print 'trans-->', timeit("getAvailableLetters2('Welcome')",setup="from __main__ import getAvailableLetters2")

输出:

filter--> 6.49355100548
.join--> 4.02496357229
trans--> 0.69938109531

关于python - 从 String 中删除一个 char,更有效的方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19858511/

相关文章:

python - 如何将正则表达式函数应用于数据框列以返回值

python - 使用给定标准验证信用卡号

c++ - 如何释放字符串数组

javascript - 如何高性能地从两个数组中提取子数组?

python - 运行多个 python 程序时的高内核 CPU

python - Azure/bin/sh : 1: [gunicorn, 中的 Docker 容器:未找到

python - 从依赖于交互式 map 的表中抓取数据

python - 对 Pandas 中包含数字和分隔符的字符串进行排序

java - 字符串的正则表达式模式至少 4 个字符,在字符串末尾包含特定字符

SQL Server 聚集索引 - 索引问题的顺序