我正在尝试迭代一系列交叉点,其中每次迭代都是一组新行的交集。我的代码看起来有点像:
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矩阵,每个新的liness迭代都会调用一个新行。如果我只是输入我想要的行号(即: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
...
所以有些交叉点是正确的,虽然这不是我想要的输出......来自这里的任何想法?
答案 0 :(得分:5)
您经常使用iii
。我甚至无法想象如果你执行这段代码会发生什么。只需给你的变量提供有用的说话名称,你的问题就可能解决了。
答案 1 :(得分:1)
据我所知,你需要:
counter = 0
for row in NNCatelogue:
for value in row:
if value in catid:
print counter, value
counter += 1
答案 2 :(得分:0)
似乎交叉点提供了非数字排序......你得到了正确的排序(只是错误的排列)吗?