在过去的几个小时里,我一直试图找出一种从列表中的单词替换多个字符的方法。假设我想在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。我希望有人能指出我正确的方向。
答案 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