我需要将一些字母替换为带有数字的List(每个字母都编码为一个数字)。我使用了这个结构:
r = []
for x in some_list:
if x in "ABCDE":
r.append({"A":10, "B":20, "C":30, "D":40, "E":50}[x])
else:
r.append(int(x)) # convert string digit to digit
some_list = r
(some_list在此代码中是可变的。)
我想问一下python中是否有一些更紧凑的结构(更少的代码)可以使这种编码运行得更快。
答案 0 :(得分:8)
怎么样
d = {"A":10, "B":20, "C":30, "D":40, "E":50}
some_list = [int(d.get(x, x)) for x in some_list]
编写列表理解的其他方法包括:
some_list = [d.get(x) or int(x) for x in some_list]
some_list = [d[x] if x in d else int(x) for x in some_list]
答案 1 :(得分:2)
您可以将每个字符映射到数字
l=[(ord(x)-ord('A')+1)*10 if x in 'ABCDE' else int(x) for x in some_list]
在更一般的情况下,您应用某些将字符转换为字母的函数
def f(c):
if c in 'ABCDE':
return (ord(c)-ord('A')+1)*10
return int(c)
l=[f(x) for x in some_list]