替换字符串上的字符

时间:2014-11-22 16:59:57

标签: python string

对不起,如果之前有人询问,我看了,找不到了。

我被要求制作一个改变字符串字符的算法。这是一个例子:

a b c

d e f

我希望每一个'a'到'd',每个'd'到'a',每个'b'到'e',每个'e'到'b'等等。所以如果我的输入是“abc def”,我的输出是“def abc”。

我试过了:

def change(string, dic):
    for i, c in dic.iteritems():
        string = string.replace(i, c)
    return string

dic = {'a':'d','b':'e','c':'f',
       'd':'a','e':'b','f':'c'}

string = 'abc def'

print change(string,dic) #returns abc abc

我不认为python会检查字符串上的每个字符两次(如果这是发生的事情)。

我尝试的一切都行不通,你们能给我一些建议吗?

感谢。

3 个答案:

答案 0 :(得分:2)

这项确切的工作有str.translate方法:

>>> import string
>>> t = string.maketrans("abcdef", "defabc")
>>> "abc def".translate(t)
'def abc'
  

string.maketrans(from,to)返回适合的翻译表   传递给translate(),将每个字符映射到   在同一位置的人物;从和必须有相同   长度。

     

string.translate(s,table [,deletechars])删除s中的所有字符   在deletechars(如果存在)中,然后翻译   使用表的字符,必须是256个字符的字符串给出   每个字符值的翻译,由其序数索引。如果   table为None,则只执行字符删除步骤。

答案 1 :(得分:0)

您可以使用词典中的get方法。第一个参数是要检查的键,第二个参数是未找到键时要使用的值。因此,如果找到密钥,则交换相应的字典值,否则保留原始字符。因此,以这种方式遍历所有字母,您可以join结果,这是您的答案。

def change(string, dic):
    return ''.join(dic.get(i,i) for i in string)

>>> string = 'abc def'
>>> d = {'a':'d', 'b':'e', 'c':'f', 'd':'a', 'e':'b', 'f':'c'}
>>> change(string, d)
'def abc'

答案 2 :(得分:0)

这适用于Python 3,不确定是否必须为Python 2更改“dic in dic”。

def change(string, dic):
    string_new = ""
    for character in string:
        if character in dic:
            string_new = string_new + dic[character]
        else:
            string_new = string_new + character
    return string_new