2016-09-16 11 views
1

私はリストとカラムのリストを持っています - b。2つのリストを比較し、新しいリストをPythonで取得する

私は出力になりたい「」値は1.

を持っているリストと比較リスト「B」から列を取りたい

a = [2, 4, 1, 1, 6, 1, 1, 3, 5, 1] 
b = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J"] 

どう
c = ["C", "D", "F", "G", "J"] 

それはできますか?理解+ジップため

答えて

9

簡単な作業:

>>> c = [y for (x, y) in zip(a, b) if x == 1] 
>>> c 
['C', 'D', 'F', 'G', 'J'] 
+2

良い答えですが、 'x、y'の周りにかっこは必要ありません –

2

私はジップと、リスト内包表記でそれを行うだろう。

>>> a = [2, 4, 1, 1, 6, 1, 1, 3, 5, 1] 
>>> b = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J"] 
>>> c = [x[0] for x in zip(b, a) if x[1] == 1] 
>>> c 
['C', 'D', 'F', 'G', 'J'] 
>>> 
3

古典的なアプローチ:

>>> c = [b[i] for i in range(len(b)) if i<len(a) and a[i] == 1] 
>>> c 
['C', 'D', 'F', 'G', 'J'] 
+0

リストbがaより大きい場合にインデックスから範囲外のエラーが発生します:) – thiruvenkadam

+0

これからチェックしてください:)それをチェックしてください! –

+0

len(a):-) "for i in range(len(a))"のように繰り返すのが最善である。 – thiruvenkadam

0

多くの方法で行う:ラムダ

一覧理解

a = [2, 4, 1, 1, 6, 1, 1, 3, 5, 1] 
b = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J"] 
print [b[index] for index, item in enumerate(a) if item == 1] 

フィルター

a = [2, 4, 1, 1, 6, 1, 1, 3, 5, 1] b = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J"] print filter(lambda index, item: len(a) > index and a[index]==1, enumerate(b)) 

リストの理解度は、リストbではなくaの長さになるため、bが大きい場合には速くなることに注意してください。

関連する問題