Python for循环按类别分隔

时间:2013-02-19 14:37:47

标签: python for-loop

我刚刚开始使用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

我的知识有限,但我知道自己想要达到的目标,最简单的方法是什么?

1 个答案:

答案 0 :(得分: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.

其中pointlevel_of_point是一个函数,它返回geo.points()返回的任何点的级别。

groupby()的作用是为您提供key函数的当前返回值,以及一个新的iterable,它保证返回key函数返回值不为的所有元素变化