2011-11-11 3 views
-3

のための非常に単純なぜ、この:Aがループ

for i in reader: 
     for j in empsTbl: 
      if i[0] == j.inmptl_wiw_userid: 
       print "Match" 

プリント500を超える結果

そして、この:

for i in empsTbl: 
     for j in reader: 
      if j[0] == i.inmptl_wiw_userid: 
       print "Match" 

印刷結果なし?

+5

と'empsTbl'は各ループが実行される時です。 'i'と' j'も整数インデックスではないループ変数の大きな名前ではありません。 – millimoose

+0

readerは約500行のcsvリーダーで、単独でループするとすべてを印刷します。 empsTblは、700行のoracleデータベース・テーブルで、単独でループする場合はすべて印刷します。最初のコードは実際には500回をはるかに超えて印刷します。 – JackalopeZero

答えて

8

あなたのreaderは、一度だけ読み取ることができるジェネレータであるようです。たぶんファイルリーダーですか?

最初のケースでは、一度だけそれを読んで、各値をempsTblのすべての要素と比較します。これは明らかにリスト(タプルまたはセットまたはdict)です。つまり、必要なだけ読むことができます。第2のケースで

、(empsTblの最初の項目でありながら、あなたは完全にそれを読んで(何も印刷されていない場合は明らかにそれと一致しない)、その後empsTblの2番目の項目には、再度読み取ることができない、すなわちファイルです読み返し)。

UPDATE:レコードのこの番号を使用すると、繰り返し処理することができますPythonのリストにすべてをコピーして、オーバーすることができます(彼らはあなたにはるかに高速に検索時間を提供するようセット/辞書は、さらに良いでしょう)

たぶん、このような何か:

readerSet = set(i[0] for i in reader) 

for j in empsTbl: 
    if j.inmptl_wiw_userid in readerSet: 
     print "Match" 
0

我々が本当にあるかreaderempsTblについての詳細を知る必要があることを答えること。しかし、心に浮かぶ一つの可能​​性は、readerがジェネレータだということです。その場合、内側ループ内のiteratingは機能しません。外側ループの最初の反復でジェネレータが使い果たされ、内側ループは空のままになります。これはすべて、外側ループのすべての反復です。

0

empsTblの場合とreaderはその後j[0]i[0]はおそらく異なるものである必要があり、異なるリストであり、要素の異なるタイプを含みます。

「ミックスオレンジとリンゴ」という古い話のように、違いを説明する必要があります。

しかし、我々は唯一の問題の一部を見ることができるので、もちろん、それは、答えのほんの一部です。これはまさに* * reader` `の値を知らなくてもお答えできませんO)

関連する問題