[英]Multiple if statements list comprehension
晚上好,
自從幾天前我發現了這種奇妙的編碼形式以來,我正在努力提高列表理解能力。 目前我正在嘗試使用多個 if 語句進行列表理解。 這是我正在嘗試重寫的代碼(為了您的理解)
for i in range(len(keys)):
key = keys[i]
if key == 1:
newAns = [1, 0, 0, 0]
answers.append(newAns)
elif key == 2:
newAns = [0, 1, 0, 0]
answers.append(newAns)
elif key == 3:
newAns = [0, 0, 1, 0]
answers.append(newAns)
else:
newAns = [0, 0, 0, 1]
answers.append(newAns)
這就是我到目前為止所做的
answers = [i for i in keys]:
[answers.append([1, 0, 0, 0]) if i == 1]
[answers.append([0, 1, 0, 0]) if i == 2]
[answers.append([0, 0, 1, 0]) if i == 3]
[answers.append([0, 0, 0, 1]) if i == 1]
該列表包含整數值,我想根據鍵的值將它們轉換為向量。
我有點卡住了,希望能得到一些關於如何處理這項任務的指導。 謝謝你。
我們把所有的key
和newAns
放在一個dict
,並在你的列表理解中使用它們怎么樣?
answer_map = {1: [1, 0, 0, 0], 2: [0, 1, 0, 0], 3: ...}
answers = [answer_map[x] if x in answer_map else [0, 0, 0, 1] for x in keys]
更新:
我完全忘記了dict.get(key, default)
(謝謝,@U9-Forward!)。 你也可以說:
[answer_map.get(x, [0, 0, 0, 1]) for x in keys]
附加@ UltrInstinct的答案,不要get
if語句做沒有:
answer_map = {1: [1, 0, 0, 0], 2: [0, 1, 0, 0], 3: ...}
answers = [answer_map,get(x,[0, 0, 0, 1]) for x in keys]
現在:
print(answers)
將輸出所需的輸出。
作為理解的粉絲,您可以使用嵌套理解單襯,如果
[ [ 1 if i == min(k, 4) else 0 for i in range(1, 5)] for k in keys]
帶字典的兩行
answer_dict = {1: [1, 0, 0, 0],
2: [0, 1, 0, 0] ...}
效率會高一些。 只是為了好玩,您可以使用嵌套的字典理解來構建字典,即使如果您只有四個答案則不值得付出努力。
answer_dict = { k: [ 1 if i == k else 0
for i in range(1, 5) for k in range(1, 5)]
}
[answer_dict[min(4, k)] for k in keys]
除了字典,您還可以使用列表
answers = [ [ 1 if i == k else 0
for i in range(1, 5) for k in range(0, 5)]]
[answers[min(4, k)] for k in keys]
如果你想要一個荒謬的單行,你可以使用嵌套的三元表達式。
In [4]: keys = [2, 1, 1, 3, 0, 2]
In [5]: result = [
...: [1,0,0,0] if key == 1 else
...: [0,1,0,0] if key == 2 else
...: [0,0,1,0] if key == 3 else
...: [0,0,0,1]
...: for key in keys
...: ]
In [6]: result
Out[6]:
[[0, 1, 0, 0],
[1, 0, 0, 0],
[1, 0, 0, 0],
[0, 0, 1, 0],
[0, 0, 0, 1],
[0, 1, 0, 0]]
但是,最好將您的邏輯包裝在一個函數中並在列表推導式中調用該函數:
In [7]: def f(key):
...: if key == 1:
...: result = [1, 0, 0, 0]
...: elif key == 2:
...: result = [0, 1, 0, 0]
...: elif key == 3:
...: result = [0, 0, 1, 0]
...: else:
...: result = [0, 0, 0, 1]
...: return result
...:
In [8]: [f(key) for key in keys]
Out[8]:
[[0, 1, 0, 0],
[1, 0, 0, 0],
[1, 0, 0, 0],
[0, 0, 1, 0],
[0, 0, 0, 1],
[0, 1, 0, 0]]
在這種情況下, dict
很好地工作,如其他答案中所示。 一般來說,不要試圖將一堆東西塞進一個列表理解中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.