0

我正在尝试在 python 中编写一个函数。该功能基于算法。它是使用具有 n 边的多边形的边求和。对于每个“循环”,您添加 n[i]+n[1+i]。在 python 中,你可以用 for 循环来做到这一点吗?在 java 和 c++ 等语言中,这很容易做到。但是python for 循环的性质使它不那么明显。for 循环可以做到这一点还是应该使用 while 循环?

4

2 回答 2

3

您可以zip在此处使用和 for 循环:

>>> lis = range(10)
>>> [x+y for x, y in zip(lis, lis[1:])]
[1, 3, 5, 7, 9, 11, 13, 15, 17]

如果列表很大,那么您可以使用itertools.izipand iter

from itertools import izip, tee
it1, it2 = tee(lis)   #creates two iterators from the list(or any iterable)
next(it2)             #drop the first item
print [x+y for x, y in izip(it1, it2)]
#[1, 3, 5, 7, 9, 11, 13, 15, 17]
于 2013-11-07T15:58:06.083 回答
1
for i in range(N):  # i = 0,1, ... N-1
      val = n[i] + n[i+1]

如果你想“环绕”,你可以写

for i in range(N):  # i = 0,1, ... N-1
      val = n[i] + n[(i+1)%N]

.. 或使用 n[-1] 与最后一个元素相同的事实

for i in range(N):  # i = 0,1, ... N-1
      val = n[i-1] + n[i]   # [N-1]+[0], [0]+[1], ... [N-2] + [N-1]

这种方法可能会更慢,但可能比拉链和迭代更容易遵循。

于 2013-11-07T16:00:51.850 回答