如何使我的代码更Pythonic?

时间:2012-12-06 13:37:50

标签: python

我需要将一些字母替换为带有数字的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中是否有一些更紧凑的结构(更少的代码)可以使这种编码运行得更快。

2 个答案:

答案 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]