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 に答える