在Python中为值列表元素赋值

时间:2015-01-01 04:45:53

标签: python list

我有一个清单:

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

我想为列表中x的所有匹配项分配1,为y的所有匹配项分配2,为z的所有匹配项分配3。 对于x=1y=2z=3的所有出现,xyz都是。

最简单的方法是什么?

3 个答案:

答案 0 :(得分:5)

try:
    mapping = {x:1, y:2, z:3}
except TypeError:
    # either x, y, or z is unhashable
    new_A = [1 if el==x else
             2 if el==y else
             3 if el==z else 
             el for el in A]
else:
    new_A = [mapping[el] for el in A]

答案 1 :(得分:1)

我认为这会做你要求的事情

In [10]: A=["x","y","z","x","z","x"]
In [11]: d={"x":1, "y":2, "z":3}
In [12]: B=map(lambda x:d[x], A)
In [13]: B
Out[13]: [1, 2, 3, 1, 3, 1]

答案 2 :(得分:0)

为了弥补你有不可洗的东西的风险,你也可以这样做

A = [x, y, z, x, z, x]
mapping = {id(x):1, id(y):2, id(z):3}
new_A_way1 = [mapping[id(el)] for el in A]
new_A_way2 = map(lambda el: mapping[id(el)], A)

只要对象存在,没有其他对象可以获得id,所以这应该是一种安全的方法。