可以通过类似于dicts的for循环遍历嵌套列表吗?

时间:2013-03-30 13:40:54

标签: python python-2.7

我的功能是获取任意三角形的区域。

以下是我所知道的工作方式

def areaOfTriangle(vertices):
    x1 = vertices[0][0]
    y1 = vertices[0][1]
    x2 = vertices[1][0]
    y2 = vertices[1][1]
    x3 = vertices[2][0]
    y3 = vertices[2][1]
    area = (1.0/2.0)*(x2*y3 - x3*y2 - x1*y3 + x3*y1 + x1*y2 - x2*y1)
    return area

然而,我认为这是垃圾,所以这就是我所描述的草图,

def areaOfTriangle(vertices):
    coord1 = vertices[0]
    coord2 = vertices[1]
    coord3 = vertices[2]
    for x1,y1 in coord1:
        for x2, y2 in coord2:
            for x3, y3 in coord3:
                area = (1.0/2.0)*(x2*y3 - x3*y2 - x1*y3 + x3*y1 + x1*y2 - x2*y1)
    return area

然而,这显然不适合列表。我认为这可以使用曾经可以从字典中获取键和值的方式......但是列表没有iteritems()方法。然后我考虑将列表转换为字典,但键在dicts中是唯一的,因此它们只会弹出一次....这会使我的功能无法正常工作。

1 个答案:

答案 0 :(得分:3)

你使用元组解包:

(x1, y1), (x2, y2), (x3, y3) = vertices

只要您在左侧创建相同的嵌套结构,Python就可以将嵌套序列解压缩到单独的变量中。

循环不起作用,因为你试图解包每个循环迭代的2值元组,其中迭代只会产生1个值。

这适用于python版本。

演示:

>>> vertices = [(1,2), (3, 4), (5, 6)]
>>> (x1, y1), (x2, y2), (x3, y3) = vertices
>>> print x1, y1, x2, y2, x3, y3
1 2 3 4 5 6