1

我刚刚开始接触 Python 的 Houdini 建模软件。

我想做的是创建一个包含“点坐标”和“建筑级别值”的列表/字典。然后,我想对具有匹配级别属性的每组点坐标使用 for 循环。

我到目前为止是这样的:

for point in geo.points():
    for i in range(-1,levels):
        if i == -1:
            pos = point.position()
        else:       
            pos = point.position() + hou.Vector3((0, level_height,0)) 
        coord = []
        coord.append(pos)
        for position in coord:
            point = geo.createPoint()
            point.setPosition(position)
            point.setAttribValue(pointlevel, i+1)
            point.setAttribValue(building, cluster)

我真正想做的是:

for each buildinglevel:   
    do for loop for all points with that buildinglevel

我的知识有限,但我知道我想要实现什么,最简单的方法是什么?

4

1 回答 1

1

您正在寻找的功能被称为itertools.groupby()groupby()将通过您给它的键对可迭代对象进行分组,前提是输入已经分类到此类组中。

from itertools import groupby

for pointlevel, points in groupby(geo.points(), key=pointlevel_of_point):
    for point in points:
        # do something with all points for this pointlevel.

wherepointlevel_of_point是一个函数,它返回由 . 返回的任何点的级别geo.points()

所做的是为您提供函数groupby()的当前返回值key,以及保证返回key函数返回值不变的所有元素的新迭代。

于 2013-02-19T14:41:17.840 回答