将一个值映射到列表中的另一个值

时间:2014-10-25 22:21:59

标签: python list mapping

在Python列表中,如何将一个值的所有实例映射到另一个值?

例如,假设我有这个列表:

x = [1, 3, 3, 2, 3, 1, 2]

现在,也许我想将所有1更改为'a',将所有2更改为'b',并将所有{{}更改为3 1}}到'c',创建另一个列表:

y = ['a', 'c', 'c', 'b', 'c', 'a', 'b']

如何优雅地进行此映射?

3 个答案:

答案 0 :(得分:7)

您应该使用字典和list comprehension

>>> x = [1, 3, 3, 2, 3, 1, 2]
>>> d = {1: 'a', 2: 'b', 3: 'c'}
>>> [d[i] for i in x]
['a', 'c', 'c', 'b', 'c', 'a', 'b']
>>>
>>> x = [True, False, True, True, False]
>>> d = {True: 'a', False: 'b'}
>>> [d[i] for i in x]
['a', 'b', 'a', 'a', 'b']
>>>

字典用作转换成什么内容的转换表。

答案 1 :(得分:3)

另一种解决方案是使用将函数应用于列表的内置函数map

>>> x = [1, 3, 3, 2, 3, 1, 2]
>>> subs = {1: 'a', 2: 'b', 3: 'c'}
>>> list(map(subs.get, x)) # list() not needed in Python 2
['a', 'c', 'c', 'b', 'c', 'a', 'b']

此处dict.get方法已应用于列表x,并且每个号码都与subs中的相应字母进行了交换。

答案 2 :(得分:2)

In [255]: x = [1, 3, 3, 2, 3, 1, 2]

In [256]: y = ['a', 'c', 'c', 'b', 'c', 'a', 'b']

In [257]: [dict(zip(x,y))[i] for i in x]
Out[257]: ['a', 'c', 'c', 'b', 'c', 'a', 'b']