在python中,每个字符从字符串替换

2024-10-02 22:34:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我是编程新手…我的代码非常简单。假设我的电话号码是“123”,那么我想得到“abc”,请检查我哪里错了

def number2char(number):
    search_array = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0"]
    replace_array = ["a", "b", "c", "d", "d", "e", "f", "g", "h", "i"]
    num_2_char = number.replace(search_array, replace_array);
    return num_2_char;  

我在这里遇到这样一个错误

num_2_char = number.replace(search_array, replace_array); TypeError: expected a character buffer object

请帮帮我。。。在


Tags: 代码numbersearchreturndef编程错误电话号码
3条回答
def number2char(number):
    search_array = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0"]
    replace_array = ["a", "b", "c", "d", "d", "e", "f", "g", "h", "i"]
    num_2_char=''
    for i in number:
        num_2_char +=  replace_array[search_array.index(i)]
    return num_2_char;

你可以用字典代替。这里有几个步骤:

  1. 我们希望将每个数字映射到一个字符,这样我们就可以创建一个字典,其中输入字符作为键,输出字符作为值。在
  2. 你不能迭代一个数字输入,所以我们必须把它转换成一个字符串来依次访问每个字符。在您的示例中,值已经是一个字符串('123'),但是没有理由不能让函数同时接受数值和字符串输入。在
  3. 替换是在list comprehension中完成的,它自然返回一个list。所以您需要调用join()将所有字符重新连接到一个字符串中。在

一种方法如下:

def number2char(number):
    search_array = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0"]
    replace_array = ["a", "b", "c", "d", "d", "e", "f", "g", "h", "i"]
    replace_dict = dict(zip(search_array, replace_array))
    num_2_char = ''.join([replace_dict.get(char, '_') 
                          for char in str(number)])
    return num_2_char

a = number2char(123)

在本例中,我使用了replace_dict.get(str(item), '_'),这样如果有人给出了一个不在{}中的输入,代码就不会崩溃;相反,他们只会返回下划线。可能有更好的方法来处理这个问题,但是它比仅仅以replace_dict[item]的形式访问字典安全。在

问题是^{}用替换子串替换了一个子串。这就是错误的意思:它需要一个子字符串,而您给了它一个单独字符的列表。在


您可以循环替换对,为每个替换对调用replace

>>> s = '123'
>>> for search, replace in zip(search_array, replace_array):
...     s = s.replace(search, replace)
>>> s
'abc'

或者,您可以使用^{},它实际上可以实现您想要的功能,尽管它需要一些设置:

^{pr2}$

或者,或者,更具可读性:

>>> search = "1234567890"
>>> replace = "abcddefghi"
>>> trans = str.maketrans(search, replace)
>>> '123'.translate(trans)
'abc'

顺便说一句,如果您不是有意地连续指定d两次,那么可能会更清楚(而且更难犯这种错误!)要指定如下字母:

>>> replace = string.ascii_lowercase[:10]

相关问题 更多 >