for循环中是否可能有python列表理解?

时间:2013-02-15 00:05:50

标签: python list-comprehension rhino3d

在下面的Rhino v.5中考虑这个python列表理解代码:

for j in range(1,3):
    globals()["objlist" + str(j)] = [rs.OrientObject(obj, [rs.PointCoordinates(x) for x in objlist[1:4]], [rs.PointCoordinates(x) for x in objlist[1+ j*3:4+ j*3]], 1) for obj in objlist]

因为很多人不会知道我在这里打电话的rhinoscriptsyntax命令:

rs.OrientObject  and rs.PointCoordinates

我希望你能阅读其余的语法,因为问题出在列表解析中,而不是在rhinoscriptsyntax中。

我未能开始工作的是列表切片代码中的第二个'j':

objlist[1+ j*3:4+ j*3]

我只得到j = 1的结果,但不是j = 2,尽管我在范围(1,3)的循环中使用了j

是'在范围内的j(1,3)'在这种情况下根本不起作用,它是否仅适用于'='的左侧,我将其用于'objlist + str( j)'或者根本不应该使用列表理解,我应该找到一种方法用列表理解来重写所有内容?

P.S。即使我用字典解决了globals()问题,我仍然需要j来在每次迭代时对不同范围的列表进行切片。

1 个答案:

答案 0 :(得分:3)

嗯,那部分工作正常:

>>> objlist = range(10)
>>> for j in range(1,3):
...   print objlist[1+ j*3:4+ j*3]
... 
[4, 5, 6]
[7, 8, 9]

请注意,由于您编写循环的方式,j等于1的情况将仅适用于您的变量objlist1,而j的情况仅适用于2等于objlist2的1}}仅适用于您的变量globals()。那会让你感到困惑吗?

我认为你也应该重构这个,最好使用一个显式循环,而不是一直巧妙地使用列表推导,如果理解将是如此长的一行。而且,是的,你应该在这里使用字典,而不是与{{1}}混淆,但我想你已经知道了。