在Python中为列表元素赋值
我有一份清单:在Python中为列表元素赋值,python,list,Python,List,我有一份清单: A=[x,y,z,x,z,x] 我想将1分配给列表中所有出现的x,2分配给所有出现的y,3分配给所有出现的z。 也就是说,对于所有出现的x,y,z,都是x=1,y,z 做这件事的最短方法是什么?我想这会满足你的要求 try: mapping = {x:1, y:2, z:3} except TypeError: # either x, y, or z is unhashable new_A = [1 if el==x else
A=[x,y,z,x,z,x]
我想将1分配给列表中所有出现的x
,2分配给所有出现的y
,3分配给所有出现的z
。
也就是说,对于所有出现的x
,y
,z
,都是x=1
,y
,z
做这件事的最短方法是什么?我想这会满足你的要求
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]
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]
为了补偿您拥有不可散列内容的风险,您还可以这样做
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
,因此这应该是一种安全的方法。假设x
、y
和z
是可散列的,当然。@IgnacioVazquez Abrams!如果x
、y
或z
不可散列,我会写一个列表comp。x、y和z字符串文字是“x”、“y”、“z”还是变量名?您想手动指定映射,还是想将1分配给第一个看到的元素,将2分配给下一个元素,依此类推?@icedtrees:好问题。OTOH,我想如果它们是实际的变量名,你只需要做x,y,z=1,2,3;A=[x,y,z,x,z,x]
:)@PM2Ring我假设它们是我们不想看到的变量change@AdamSmith:啊!我没想到。我想我们得等一等,看看普什卡尔·德拉维德说了些什么……注意,这里没有必要做lambdaB=map(d.get,A)
是等效的。或者operator.getitem
。