1

我需要将一些字母替换为带有数字的列表(每个字母都编码为一个数字)。我使用了这个结构:

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中是否有一些更紧凑的结构(更少的代码)可以使这种编码和运行得更快。

4

2 回答 2

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]
于 2012-12-06T13:41:18.917 回答
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]
于 2012-12-06T13:46:39.573 回答