gpt4 book ai didi

python - 用另一个可迭代的值替换可迭代的值到相同的值

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:43:57 25 4
gpt4 key购买 nike

这是一个复杂的示例,但它显示了我正在尝试做的事情。假设我有一个字符串:

from string import ascii_uppercase, ascii_lowercase, digits
s = "Testing123"

我想用大写字母“L”替换 s 中出现在 ascii_uppercase 中的所有值,出现在 ascii_lowercase 中的所有值> 用“l”表示小写字母,用“n”表示数字的数字

我目前在做:

def getpattern(data):
pattern = ""
for c in data:
if c in ascii_uppercase: pattern += "L"; continue
if c in ascii_lowercase: pattern += "l"; continue
if c in digits: pattern += "n"; continue
pattern += "?"

但是,如果要替换多个列表,这会很乏味。我通常更擅长为这样的事情寻找 map 类型的算法,但我很难过。我不能让它取代任何已经被取代的东西。例如,如果我运行数字 one 并将其替换为“n”,下一次迭代可能会将其替换为“l”,因为“n”是小写字母。

getpattern("Testing123") == "Lllllllnnn"

最佳答案

您可以创建一个转换表,将所有大写字母映射到 'L',将所有小写字母映射到 'l',将所有数字映射到 ' n'。一旦有了这样的 map ,就可以将其传递给 str.translate()

from string import ascii_uppercase, ascii_lowercase, digits, maketrans
s = "Testing123"

intab = ascii_uppercase + ascii_lowercase + digits
outtab = ('L' * 26) + ('l' * 26) + ('n' * 10)
trantab = maketrans(intab, outtab)

print s.translate(trantab)

请注意,在 Python 3 中没有 string.maketrans 函数。相反,您从 str 对象 str.maketrans() 获取方法。阅读更多相关信息 here和文档 here

我不太确定 str.translate() 的内部结构,但我有根据的猜测是映射为每个字符串字符创建了一个长度为 256 的字符串。因此,当它传递您的字符串时,它会将 \x00 转换为 \x00,将 \x01 转换为 \x01 等,但 AL。这样您就不必检查每个字符是否在您的翻译词典中。我认为盲目翻译所有没有分支的字符会导致更好的性能。打印 ''.join(chr(i) for i in range(256)) 比较看看这个。

关于python - 用另一个可迭代的值替换可迭代的值到相同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35052471/

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