0

考虑下面 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 的结果,尽管我在 range(1,3) 的循环中使用 aj

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

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

4

1 回答 1

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。这就是让你困惑的地方吗?

我认为您还应该重构它,如果理解将是这么长的一行,那么最好使用显式循环而不是一直尝试巧妙地使用列表理解。而且,是的,你应该在这里使用字典而不是乱用,globals()但我想你已经知道了。

于 2013-02-15T00:17:08.757 回答