对不起,如果之前有人询问,我看了,找不到了。
我被要求制作一个改变字符串字符的算法。这是一个例子:
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会检查字符串上的每个字符两次(如果这是发生的事情)。
我尝试的一切都行不通,你们能给我一些建议吗?
感谢。
答案 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