2017-05-01 10 views
0

ネストされたリストの理解をしようとしていますが、どうすればいいのか分かりません。現在、私はこのようなループを持っている:これは動作しますが、それが完了するのをネストされたリストの理解の変数に追加する

filtered = [] 
p = -1 
for i in list: 
    p += 1 
    for k in list_of_lists[p]: 
    if not k in filter: 
     filtered.append(k) 

、約5~8秒かかり、この時間は、それが使用されていることな状況のため、ほとんど受け入れられません。私はリストの理解にそれをしようとしているが、私はリストの理解にp += 1を作る方法を理解しているように見えることができません。私はこれを試みました:

filtered = [i for i in list for k ind list_of_list[p], p+=1] 

ただし、明らかに動作しません。私はこれを回避するためにとにかくあるかどうか疑問に思っていた。

+0

入力と希望出力の例を挙げることができますか? – Allen

+0

なぜあなたはリストをループして、list_of_listsを使用していますか? – Neil

+0

'' enumerate''を使って '' p''だけを置き換えることはできませんか? – Grimmy

答えて

1

リストの理解の中で自己参照することができないため、フラット化してsetに変換します。違いは、セットは各アイテムの1つしか持たず、注文は強制されないということです。

list_of_lists = [["blue","green","red"],["red","yellow","white"],["orange","yellow","green"]] 
filtered = set(y for x in list_of_lists for y in x) 
print(filtered) 
+0

これは正しいアプローチだと思いますが、" set and list "機能は"基本的に同じ "とは言いません。それらは非常に異なるユースケースを持つ2つの異なるコンテナタイプです。リストはシーケンスなので、順序付けされ、インデックス付けの動作をします。また、メンバーは線形時間メンバーシップテストを行います。セットは順序付けされておらず、一意の値だけを保持し、定時メンバーシップテストを行います。 –

+0

@ juanpa.arrivillaga入力のおかげで、更新されました。 – Neil

関連する問題