1

各反復が新しい行セットの交差である一連の交差を反復しようとしています。次のようなコードがあります。

    for liness in range(len(NNCatelogue)):
        for iii in [iii for iii, y in enumerate(NNCatelogue[iii]) if y in set(NNCatelogue[liness]).intersection(catid)]:
            print iii, y

NNCatelogue は基本的に 1268 X 12 の行列であり、行の新しい反復ごとに新しい行が呼び出されます。必要な行番号(つまり、0、1、2 ...)を単純に入力すると、予想される出力が得られます(前にforループがありません)。上記のコードを実行すると、次の出力が得られます。

    10 C-18-1064
    4 C-18-1122
    4 C-18-1122
    5 C-18-1122
    5 C-18-1122
    7 C-18-1122
    8 C-18-1122
    9 C-18-1122
    10 C-18-1122
    11 C-18-1122
    6 C-18-1122
    ...

予想される出力は次のようになります。

  0 C-18-1
  1 C-18-259
  2 C-18-303
  3 C-18-304
  4 C-18-309
  5 C-18-324
  6 C-18-335
  7 C-18-351
  8 C-18-372
  9 C-18-373
  10 C-18-518
  11 C-18-8

私が間違っている可能性がある場所はありますか?どんな助けでも大歓迎です!

アップデート:

回答の 1 つのバリエーションを試してみましたが、予想に近いものでしたが、それほどではありません。これが私が試したものです:

    counter = 0
    for row in NNCatelogue:
        for value in row:
            if value in set(NNCatelogue[counter]).intersection(catid):
                print counter, value
                counter += 1

結果の出力は次のとおりです。

    0 C-18-1
    1 C-18-324
    2 C-18-351
    3 C-18-4
    4 C-18-5
    5 C-18-6
    6 C-18-7
    7 C-18-8
    8 C-18-9
    9 C-18-10
    10 C-18-11
    11 C-18-12
    12 C-18-13
    ...

したがって、いくつかの交差点は正しいですが、それは私の望ましい出力ではありません...ここから何かアイデアはありますか?

4

3 に答える 3

5

使用iii頻度が高すぎます。このコードを実行すると、正確に何が起こっているのか想像さえできません。変数にわかりやすい名前を付けるだけで、おそらく問題は解決します。

于 2012-10-09T14:32:54.983 に答える
1

あなたが必要なものを理解しているように:

counter = 0
for row in NNCatelogue:
    for value in row:
        if value in catid:
            print counter, value
            counter += 1
于 2012-10-09T14:34:46.120 に答える
0

交差点は数値以外の並べ替えを提供しているようです...適切なセットを取得していますか(順列が間違っているだけです)?

于 2012-10-09T14:33:34.607 に答える