替换列表中元素的多个字符,

时间:2015-08-17 22:04:09

标签: python python-2.7

在过去的几个小时里,我一直试图找出一种从列表中的单词替换多个字符的方法。假设我想在new_chars中将old_chars char替换为直接位于它们下方的字符(c代表e,h代表q等),这是如何最好地实现的?

list = ['cheese', 'on', 'toast']
old_chars = ['c', 'h', 's', 'a']
new_chars = ['e', 'q', 'e', 'w']

我玩过列表推导,例如:

new_list = [c.replace('c', 'h') for c in list]

对每组字符使用多个理解似乎不能很好地工作并且非常混乱。我也尝试使用zip函数,但是当我尝试迭代列表并比较每个元素中的每个字符时,将其与old_char进行比较,以替换为不起作用的new_char。我希望有人能指出我正确的方向。

1 个答案:

答案 0 :(得分:4)

您可以使用str.translate。它需要可以使用maketrans

创建的转换表
from string import maketrans
trs = maketrans(''.join(old_chars), ''.join(new_chars))

其余的就像这样简单:

[s.translate(trs) for s  in  ['cheese', 'on', 'toast']]

另外,我不会将list用作变量名。它隐藏了内置列表,一般来说是一个坏主意:

>>> atuple = (1, 2, 3)
>>> list(atuple)
[1, 2, 3]
>>> list = ['cheese', 'on', 'toast']
>>> list(atuple)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'list' object is not callable