通过 Python 中的三个列表元素替换一个值

Replacing a value through three list's elements in Python

A = ['d','a','c','a','a','d','a','d','c','e']
B = ['a','d','c','e']
C = ['z','x', 'y','k']

从上面可以看出,我有三个列表。列表 A 是字符的随机组合,而 B 是按频率对 A 列表中的元素重新排序而不重复它们。列表 C 是我要替换的值。我想检查列表B中的值是否在A中并将列表A中的值更改为列表C中的值。如果列表A中有一个值'B[0]',我想更改所有'B[0]' 列表 A 中的值更改为 C[0]。其余的元素也想这样做

我想要的:

A=['x','z','y','z','z','x','z','x','y','k']

我认为最简单的方法是创建一个字典,键 B 到值 C 并使用该字典替换 A.

中的值
A = ['d','a','c','a','a','d','a','d','c','e']
B = ['a','d','c','e']
C = ['z','x', 'y','k']

char_dict = dict(zip(B, C))
for i, char in enumerate(A):
    A[i] = char_dict[char]

这也可以使用列表理解来完成

char_dict = dict(zip(B, C))
A = [char_dict[char] for char in A]

您可以制作翻译字典 out of B and C 并使用列表理解。

>>> d = dict(zip(B, C))
>>> [d[x] for x in A]
['x', 'z', 'y', 'z', 'z', 'x', 'z', 'x', 'y', 'k']

如果 A 中的某些值可能不在 B 中,您可以将 d[x] 替换为 d.get(x, x).

如果您需要覆盖 A 的值,请使用 :

A[:] = [d[x] for x in A]

创建一个字典,将要替换的字符映射到它们的替换项,并替换列表推导中的字符:

A = ['d','a','c','a','a','d','a','d','c','e']
B = ['a','d','c','e']
C = ['z','x', 'y','k']

subs = dict(zip(B, C))
A = [subs[c] for c in A]

>>> A
['x', 'z', 'y', 'z', 'z', 'x', 'z', 'x', 'y', 'k']

我们可以假设 subs[c] 将始终成功,因为 B 派生自 A,因此 B 中的所有项目也必须出现在 [=14= 中].

如果不是这种情况,那么您可以改用 dict.get()

A = [subs.get(c, c) for c in A]