如何用下一个字符串替换字符串中的字符?

时间:2015-03-27 18:33:15

标签: python

我想用下一个字符替换字符串的每个字符,最后一个字符应该成为第一个字符。这是一个例子:

abcdefghijklmnopqrstuvwxyz

应该成为:

bcdefghijklmnopqrstuvwxyza

是否可以在不使用替换功能的情况下进行26次?

3 个答案:

答案 0 :(得分:9)

您可以使用str.translate() method让Python在一个步骤中替换其他字符。

使用string.maketrans() function将ASCII字符映射到目标;使用string.ascii_lowercase可以帮助您,因为它可以节省您自己输入所有字母的信息:

from string import ascii_lowercase
try:
    # Python 2
    from string import maketrans
except ImportError:
    # Python 3 made maketrans a static method
    maketrans = str.maketrans 

cipher_map = maketrans(ascii_lowercase, ascii_lowercase[1:] + ascii_lowercase[:1])
encrypted = text.translate(cipher_map)

演示:

>>> from string import maketrans
>>> from string import ascii_lowercase
>>> cipher_map = maketrans(ascii_lowercase, ascii_lowercase[1:] + ascii_lowercase[:1])
>>> text = 'the quick brown fox jumped over the lazy dog'
>>> text.translate(cipher_map)
'uif rvjdl cspxo gpy kvnqfe pwfs uif mbaz eph'

答案 1 :(得分:4)

当然,只需使用字符串切片:

>>> s = "abcdefghijklmnopqrstuvwxyz"
>>> s[1:] + s[:1]
'bcdefghijklmnopqrstuvwxyza'

基本上,您要执行的操作类似于将字符的位置向左旋转一个位置。因此,我们可以简单地在第一个字符之后取出字符串的一部分,并将第一个字符添加到其中。

编辑 :我认为OP要求旋转一个字符串(从他给定的输入中可信,输入字符串有26个字符,他可能已经为每个角色进行了手动替换),如果帖子是关于创建密码的话,请查看@ Martjin上面的答案。

答案 2 :(得分:0)

因为Python中的字符串是不可变的,所以需要将字符串转换为列表,替换,然后转换回字符串。我在这里使用modulo。

def convert(text):
    lst = list(text)
    new_list = [text[i % len(text) +1] for i in lst]
    return "".join(new_list)

不要使用切片,因为这样效率不高。 Python将为每个更改的char创建新的完整拷贝字符串,因为字符串是不可变的。