在下面的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来在每次迭代时对不同范围的列表进行切片。
答案 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}}混淆,但我想你已经知道了。