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

Python 循环中的上一个和下一个元素,python,list,python-3.x,for-loop,Python,List,Python 3.x,For Loop,我有一份要点清单: a = [(2,4),(34,53),(34,2),(84,64)] 这些点按顺时针顺序列出,并形成一个多边形。我需要找到多边形的周长,它是相邻点之间距离的总和。我必须使用距离公式来计算距离,因此它必须是(2,4)和(34,53)之间的距离,然后是(34,53)和(34,2)之间的距离,依此类推 如果循环使用距离公式来使用第一个元素和第二个元素的点,然后移动到第二个和第三个元素,依此类推,最后当它位于最后一个元素时,它在最后一个元素和第一个元素上使用距离公式。。有点像单词包

我有一份要点清单:

a = [(2,4),(34,53),(34,2),(84,64)]
这些点按顺时针顺序列出,并形成一个多边形。我需要找到多边形的周长,它是相邻点之间距离的总和。我必须使用距离公式来计算距离,因此它必须是
(2,4)
(34,53)
之间的距离,然后是
(34,53)
(34,2)
之间的距离,依此类推


如果循环使用距离公式来使用第一个元素和第二个元素的点,然后移动到第二个和第三个元素,依此类推,最后当它位于最后一个元素时,它在最后一个元素和第一个元素上使用距离公式。。有点像单词包装?

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

定义多边形周长函数 也可以使用多边形的点列表作为函数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

更简单的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)
考虑“负”距离

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
导入数学
周长=0
a=[(2,4)、(34,53)、(34,2)、(84,64)]
对于范围内的i(len(a)):
k=i+1如果(i>>打印(““周长:{}”“”。格式(周长))
周长:290.7798169276019

您的逻辑没有找到(84,64)和(2,4)之间的距离,您需要在开始之前添加
a.append(a[0])
loop@Ravichandra谢谢你让我知道!
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