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

知道我哪里可能出错了吗?任何帮助是极大的赞赏!

更新:

我尝试了其中一个答案的变体,虽然它更接近我的预期,但并不完全存在。这是我尝试过的:

    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 回答