我的功能是获取任意三角形的区域。
以下是我所知道的工作方式
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中是唯一的,因此它们只会弹出一次....这会使我的功能无法正常工作。
答案 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