我有一个清单:
A=[x,y,z,x,z,x]
我想为列表中x
的所有匹配项分配1,为y
的所有匹配项分配2,为z
的所有匹配项分配3。
对于x=1
,y=2
,z=3
的所有出现,x
,y
和z
都是。
最简单的方法是什么?
答案 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
,所以这应该是一种安全的方法。