2017-05-16 15 views
0

私は、条件付きのステートメントでネストされたforループを実行しようとしています。それを実行するとき、私は条件文で定義した文を出力することを期待しています。しかし、何も印刷されません。 (それは無期限に実行されません)。 Pokemons_gymsは文字列のリストです。 Playersは辞書です。私はelse: continueを追加しようとしましたが動作しません。私はそうgym == players[players_id]['gyms_visited']は常にFalseに評価リストを返す 入れ子になったforループの予期しない結果 - Python

pokemon_gyms = ['reddit.com', 'amazon.com', 'twitter.com', 
      'linkedin.com', 'ebay.com','netflix.com', 
      'udacity.com','stackoverflow.com','github.com', 
      'quora.com'] 

players= { 
    1: { 
     'gyms_visited': ['amazon.com', 'ebay.com'] 
     } 
    2:{ 
     'gyms_visited' : ['stackoverflow.com','github.com'] 
     } 
} 

for gym in pokemon_gyms:  
    for players_id in players: 
     if gym == players[players_id]['gyms_visited']: 
      print(str(players[players_id]['player_name']) +" has visited "+ str(gym)) 

...

答えて

4

players[players_id]['gyms_visited']私は、コードを実行している任意のエラーを得ることはありません立ち往生原因です。

あなたはinを使用してメンバーシップを確認する必要があります:

if gym in players[players_id]['gyms_visited']: 
    ... 
+0

はそれぞれ「is」および「evaluate to」です。 「戻る」ではありません。ここには返品はありません。 –

+1

@BoundaryImposition - 多分。十分に低いレベルでは、 '__getitem__'が返すものについて話しています。戻り値はここにあります。明示的ではありません。 – mgilson

+0

@mgilson:heh nice maneuvering。それでも、ある関数からの復帰によって "X"が生成されたとしても、 "XはYを返す"とは言っても間違いです。 –

3

をここでの問題は、gymplayers[players_id]['gyms_visited']が文字列のリストありながらstrになるだろうということです。このため、彼らは決して平等ではありません。

おそらくあなたは、あなたの問題はラインif gym == players[players_id]['gyms_visited']:である

if gym in players[players_id]['gyms_visited']: 
0

を確認したいです。 ==は等しいかどうかをチェックするので、gymが辞書のplayers[players_id]['gyms_visited']のリストと等しいかどうかを調べます。

あなたは、リスト内のアイテムのいずれかが、あなたが望むかもしれないので、大規模なリストのために、これはかなり遅くなることができることをinキーワード

for gym in pokemon_gyms: 
    for players_id in players: 
     if gym in players[player_id]['gyms_visited']: 
      # Do things here 

お知らせを使用することができ、文字列と等しいかどうかを確認したい場合多くの訪問されたpokemon_gymsを持つプレイヤーがいる場合は、代わりにsetを使用することを検討してください。

0

YUP! すべてのセットは、タイプ(ジム)がタイプ(players [players_id] ['gyms_visited'])と異なるため、すべての結果がFalseになった '=='でした。

私は '=='を 'in'に置き換え、完全に機能しました。

ありがとう!

+0

=代入演算子 ==は等価演算子です – Frrank

関連する問題