2016-11-15 18 views
1

ここには奇妙なビットがあります...リスト内の複数のリスト内の項目を確認してください

基本的に私はその中のリストを持つリストを持っています。

ratings = [ 
    # ''' 1 star ''' 
    ["Strangers on a Train", "Anchorman", "Saw", "Suicide Squad"], 

    # ''' 2 star ''' 
    ["Shutter Island", "Shaun of the Dead", "Scream", "Indiana Jones"], 

    # ''' 3 star''' 
    ["Goodfellas", "Mr Bean", "The Ring", "Dark Knight"], 

    # ''' 4 star''' 
    ["Scarface", "Hot Fuzz", "Nosferatu", "Die Hard"], 

    # ''' 5 star''' 
    ["Pulp Fiction", "Airplane", "The Omen", "Deadpool"] 
] 

は明らかにこれは映画のリストであり、この文脈はかなり役に立たないですが、リスト内で、映画5のうち評価のそれぞれを与える5つのリストです。

def rating(): 
    if userInfo[7] == "1": 
     return range(5) 
    elif userInfo[7] == "2": 
     return range(2, 5) 
    elif userInfo[7] == "3": 
     return range(3, 5) 
    elif userInfo[7] == "4": 
     return range(4, 5) 
    else: 
     return range(5, 5) 

ここでは、見たいと思うフィルムの最低定格に応じて本質的に範囲が返される関数です。それらの最小の評価は4でそう言って、彼らは唯一の評価4と5のフィルムを見ることができます

は、彼らが映画

movies = ["Strangers on a Train", "Anchorman", "Shutter Island", 
      "Shaun of the Dead", "Goodfellas", "Mr Bean", 
      "Scarface", "Hot Fuzz", "Pulp Fiction", "Airplane"] 

今私がいるこのリストからすべての動画を削除したいのリストを持っていると言います評価4以上ではありません。

私は

new = [] 
for item in movies: 
    if item not in in ratings[rating()]: 
     new.append(item) 

を試みたが、それは整数にする必要があるとして、私は大きなリスト内の複数のリストを検索する範囲を使用することはできませんので、これは動作しません。

私はこのような小さな問題のための巨大なポストだと私は理解していますが、私の脳は死にかけており、私はこれを何時間もやろうとしていました。

+0

スライシングを使用するだけです: 'ratings [3:]'はあなたにすべての映画に4以上の評価を与えます – acushner

答えて

2

第1に、レーティングデータは、演奏者の検索には実際には最適ではありません。だから私は辞書内包表記を使用して値としてキーや評価などのムービー名で辞書になるだろう:

movie_rating = {name:i+1 for i,mlist in enumerate(ratings) for name in mlist} 

(この辞書は、何度も再利用することができます)

をその後、私は内の第二のリストに、このデータを適用しますリストの理解無評価の映画は0点を得る。

print([x for x in movies if movie_rating.get(x,0) >= 4]) 

結果は:

['Scarface', 'Hot Fuzz', 'Pulp Fiction', 'Airplane'] 

この方法は、「nは、上記評価」最短であるが、正確な評価情報を保持するという利点を有しており、ないかもしれません。

この他のSO Q &については、list and dict comprehensionsについて読むことができます。質問はすでにリストコンパスを非常によく説明しており、答えはdictcompsについて説明しています。

+0

あなたはGODSENDです。これは間違いなく機能しますが、私は真剣にあなたが何をしたのかわかりません。私は一見外見上頭を上げることはできません。理解するのに役立つリソースはありますか?もしあなたがそれを心配しないで、あなたの時間に感謝しないでください:D –

+0

私は偉大なSOのQ&Aにリンクするために私の記事を編集しました、それは非常に明確です。あなたは古典的な "for"ループで行うことができますが、listcompsはよりエレガントで、速い記述と実行の高速です。 –

関連する問題