我想擺脫數組中的所有零和另一個數組中,擺脫相應的索引中的零的元素第一個數組。列表理解,擺脫並行列表中的相應元素
我:
A = [2,3,2,4,5]
P = [0.1,0.3,0.4,0.5,0]
new_P = [x for x in P if P[x]!=0]
new_A = [x for x in A if P[x]!=0]
我在做什麼錯?例如,對於new_P
,我得到一個空白數組。
我想擺脫數組中的所有零和另一個數組中,擺脫相應的索引中的零的元素第一個數組。列表理解,擺脫並行列表中的相應元素
我:
A = [2,3,2,4,5]
P = [0.1,0.3,0.4,0.5,0]
new_P = [x for x in P if P[x]!=0]
new_A = [x for x in A if P[x]!=0]
我在做什麼錯?例如,對於new_P
,我得到一個空白數組。
如何將列表壓縮在一起並將它們的元素一起處理?
a = [2, 3, 2, 0, 5]
p = [0.1, 0.3, 0.4, 0.5, 0.6]
a, p = zip(*[(a, p) for a, p in zip(a, p) if p != 0])
您的第一個列表解析會無法工作,因爲你通過迭代參考 ,但你試圖通過索引訪問的元素。 Python將會引發一個IndexError
。將您的比較更改爲使用x
而不是P[x]
:new_P = [x for x in P if x != 0]
進行測試。
您的第二個列表理解不會出於第一個無法正常工作的確切原因。但是同樣的修復不適用於你的第二個列表理解。您需要使用zip
遍歷和P
和A
,測試P中的當前元素是否爲零。
>>> A = [2,3,2,4,5]
>>> P = [0.1,0.3,0.4,0.5,0]
>>> new_P = [el for el in P if el != 0] # testing using x not P[x]
>>> new_P
[0.1, 0.3, 0.4, 0.5]
>>> new_A = [el[0] for el in zip(A, P) if el[1] != 0]
>>> new_A
[2, 3, 2, 4]
>>>
謝謝,有道理:) –
@python_learner當然,很高興我可以幫助:)作爲一個方面說明,我建議[學習更多關於列表解析](https://docs.python.org/ 2/tutorial/datastructures.html#list-comprehensions)才能使用更多。 –
我猜'x'是元素,而不是指數? – qxz
想一想在這種情況下'x'代表什麼。 – pzp
請澄清問題。我不確定你想要達到的目標 –