循环中的上一个和下一个元素

时间:2015-12-02 04:01:23

标签: python list python-3.x for-loop

我有一个点列表:

a = [(2,4),(34,53),(34,2),(84,64)]

这些点按顺时针顺序列出,它们形成一个多边形。我需要找到多边形的周长,它是相邻点之间距离的总和。我必须使用距离公式来找到距离,因此它必须是(2,4)(34,53)之间的距离,然后是(34,53)(34,2)之间的距离等等。

我如何编写这个for循环,使用距离公式来使用第一个元素和第二个元素的点,然后当移动到第二个和第三个元素,依此类推,最后当它在最后元素,它使用最后一个元素和第一个元素的距离公式..有点像自动换行?

4 个答案:

答案 0 :(得分:3)

更简单的for循环只是:

>>> for i in range(len(a)):
        print a[i-1], a[i]


(84, 64) (2, 4)
(2, 4) (34, 53)
(34, 53) (34, 2)
(34, 2) (84, 64)

答案 1 :(得分:0)

使用模数除法来计算指数。例如,如果您有一个长度为n的点列表,并且j是您的索引,那么您可以使用j = (j+1)%n计算包装索引。

答案 2 :(得分:0)

定义多边形周长函数

import math
def poly_peri():

a = [(2,4),(34,53),(34,2),(84,64)]
# Intializing perimeter to be 0
perimeter = 0

# MAIN LOOP
#[len(a) - 1] because we dont want to continue after the last number
for i in range(len(a) - 1):
    distance = ((a[i + 1][0] - a[i][0])**2 + (a[i+1][1] - a[i][1])**2)

    perimeter += math.sqrt(distance)

return perimeter

您还可以使用多边形的点列表作为函数poly_peri(a)的参数。意思是,当你调用函数poly_peri()时,你会把它称为poly_peri([(2,4),(34,53),(34,2),(84,64)])。对于你作为参数放置的内容,这将输出相同的结果。代码看起来像

import math
def poly_peri(a):

points = a
# Intializing perimeter to be 0
perimeter = 0

# MAIN LOOP
#[len(points) - 1] because we dont want to continue after the last number
a.append(a[0])
for i in range(len(points) - 1):
    distance = ((points[i + 1][0] - points[i][0])**2 + (points[i+1][1] - points[i][1])**2)

    perimeter += math.sqrt(distance)

return perimeter

答案 3 :(得分:0)

会计"否定"距离

import math
perimeter = 0
a = [(2,4),(34,53),(34,2),(84,64)]

for i in range(len(a)):
    k = i+1 if (i<len(a)-1) else 0
    x,y = a[i]
    x2,y2 = a[k]
    edge = math.fabs(math.sqrt(math.pow(y2-y, 2) + math.pow(x2-x,2)))
    print("""Edge {}: {}""".format(i,edge))
    perimeter += edge


# when run
Edge 0: 58.52349955359813
Edge 1: 51.0
Edge 2: 79.64923100695951
Edge 3: 101.6070863670443
>>> print("""Perimeter: {}""".format(perimeter))
Perimeter: 290.7798169276019