2016-11-22 88 views
0

我想擺脫數組中的所有零和另一個數組中,擺脫相應的索引中的零的元素第一個數組。列表理解,擺脫並行列表中的相應元素

我:

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,我得到一個空白數組。

+2

我猜'x'是元素,而不是指數? – qxz

+2

想一想在這種情況下'x'代表什麼。 – pzp

+0

請澄清問題。我不確定你想要達到的目標 –

回答

0

如何將列表壓縮在一起並將它們的元素一起處理?

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]) 
1
  • 您的第一個列表解析會無法工作,因爲你通過迭代參考 ,但你試圖通過索引訪問的元素。 Python將會引發一個IndexError。將您的比較更改爲使用x而不是P[x]new_P = [x for x in P if x != 0]進行測試。

  • 您的第二個列表理解不會出於第一個無法正常工作的確切原因。但是同樣的修復不適用於你的第二個列表理解。您需要使用zip遍歷PA,測試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] 
    >>> 
    
+0

謝謝,有道理:) –

+0

@python_learner當然,很高興我可以幫助:)作爲一個方面說明,我建議[學習更多關於列表解析](https://docs.python.org/ 2/tutorial/datastructures.html#list-comprehensions)才能使用更多。 –