2017-03-21 5 views
-2

リスト "A"を100.000要素までループする必要があります。しかし、私はそれらのいくつかをスキップする必要があり、特に私は別のリスト "B"に書き込まれている要素をスキップしたい。 これを行う最善の方法は何ですか?Python:別のリストに属するいくつかの数字を除いたリストをループする方法は?

あなたは、フィルタを使用することができます
+0

「B」からセットを作り、各要素が「B」であるかどうかをチェックする。 – khelwood

+1

コードを書いたことはありますか? – elena

+1

'B =セット(B); only_in_A = [xがBならAのxのxのためのx] '...または' A'の複数の繰り返し値を気にしないなら 'A'を' set'に変換します。 – blacksite

答えて

2

a = [0, 1, 2, 3, 4] 
b = [1, 2] 
list(filter(lambda el: el not in b, a)) 
# [0, 3, 4] 

あなたが要素に反復処理する必要がある場合は、listはフィルタを包むドロップ:

また
for el in filter(lambda el: el not in b, a): 
    do_something() 

、同じリストで達成することができます理解は本質的に意味的に同じです:

[el for el in a if el not in b] 
# [0, 3, 4] 

Kどちらのバージョンでも、bの要素について線形検索を実行することに注意してください。 そのリストがかなり長い場合、これは本当に遅くなるかもしれません。 より効率的な方法(コメントに示唆されているように)は、リストではなくセットをbにすることです。 これは、bの要素がhashableであることのみを要求します。

bset = set(b) 
[el for el in a if el not in bset] 
# [0, 3, 4] 
関連する問題