Karnivaurus
Karnivaurus

Reputation: 24111

Mapping one value to another in a list

In a Python list, how can I map all instances of one value to another value?

For example, suppose I have this list:

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

Now, perhaps I want to change all 1's to 'a', all 2's to 'b', and all 3's to 'c', to create another list:

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

How can I do this mapping elegantly?

Upvotes: 2

Views: 6142

Answers (3)

Alex Riley
Alex Riley

Reputation: 176770

An alternative solution is to use the built-in function map which applies a function to a list:

>>> 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']

Here the dict.get method was applied to the list x and each number was exchanged for its corresponding letter in subs.

Upvotes: 3

inspectorG4dget
inspectorG4dget

Reputation: 113915

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']

Upvotes: 2

user2555451
user2555451

Reputation:

You should use a dictionary and a 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']
>>>

The dictionary serves as a translation table of what gets converted into what.

Upvotes: 8

Related Questions