2016-11-22 6 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を発行します。比較をP[x]の代わりにxでテストするように変更します。new_P = [x for x in P if x != 0]

  • あなたの2番目のリストの理解は、最初のものが機能しない正確な理由では機能しません。しかし、同じ修正は、あなたの2番目のリストの理解には当てはまりません。 を反復するには、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)を使用してください。 –