迭代列表并返回一个项目

时间:2015-02-24 21:06:34

标签: python list iteration

elementList = [ 0.05, 0.07, 0.08, 0.15, 0.25, 0.32, 0.4 ]

pathLength = elementList[-1]    

itElement = iter(elementList)
for a in itElement:
    b = next(itElement)
    c = next(itElement)
    elementSize1 = b - a
    percentOfPathElement.append(elementSize1/pathLength)
    elementSize2 = c - b
    percentOfPathElement.append(elementSize2/pathLength)

我在曲线上有一个点列表,我需要计算它们之间的距离,并将Value / pathLength附加到列表中。

所以我需要这样做:

0.07-0.05
0.08-0.07
0.15-0.08
etc...

如果我运行上面的代码,当它到达循环的末尾时,它会跳过一次计算,因为" a"当我真的需要返回一个值时,会转到下一个值。

2 个答案:

答案 0 :(得分:1)

这称为相邻差异。使您的方法有效:

itElement = iter(elementList)
a = next(itElement)
for b in itElement:
    elementSize1 = b - a
    percentOfPathElement.append(elementSize1/pathLength)
    a = b

每次迭代时打印ab会产生:

0.05 0.07
0.07 0.08
0.08 0.15
0.15 0.25
0.25 0.32
0.32 0.4

并且percentOfPathElement为:

[0.05000000000000001, 0.024999999999999988, 0.17499999999999996, 0.25, 0.17500000000000002, 0.20000000000000004]

如果您需要错过最后一个元素,请将itElement = iter(elementList)更改为itElement = iter(elementList[:-1])

您还可以使用列表推导,例如(从Kasra AD修改):

percentOfPathElement = [(b - a) / pathLength for a, b in zip(elementList, elementList[1:])]

或(从Blckknght修改):

import operator
percentOfPathElement = [diff / pathLength for diff in map(operator.sub, elementList[1:], elementList)]

这些工作方式与第一个版本相同,但可能更难理解。

答案 1 :(得分:1)

你可以使用zip函数来获得欲望对然后计算子:

>>> elementList = [ 0.05, 0.07, 0.08, 0.15, 0.25, 0.32, 0.4 ]
>>> [j-i for i,j in zip(elementList,elementList[1:])]
[0.020000000000000004, 0.009999999999999995, 0.06999999999999999, 0.1, 0.07, 0.08000000000000002]