在Python中访问具有偏移量的元素for .. in循环

时间:2009-08-15 12:00:36

标签: python loops

我一直在使用Python,我已经收集到它通常更好(或'pythonic')使用

for x in SomeArray:

而不是更多的C风格

for i in range(0, len(SomeArray)):

我确实看到了这方面的好处,主要是更清晰的代码,以及使用漂亮的map()和相关功能的能力。但是,我经常遇到这样的情况:我想同时访问数组中不同偏移的元素。例如,我可能想要将当前元素添加到元素后面两步。有没有办法在不诉诸显式指数的情况下做到这一点?

2 个答案:

答案 0 :(得分:15)

在Python中执行此操作的方法是:

for i, x in enumerate(SomeArray):
    print i, x

enumerate生成器生成一个2元组序列,每个元组包含数组索引和元素。

答案 1 :(得分:6)

列表索引和zip()是你的朋友。

以下是我对更具体问题的回答:

  

我可能想要将当前元素添加到元素后面两步。有没有办法在不诉诸显式指数的情况下做到这一点?

arr = range(10)
[i+j for i,j in zip(arr[:-2], arr[2:])]

如果您打算处理数值数组,也可以使用模块numpy。例如,上面的代码可以更优雅地写为:

import numpy
narr = numpy.arange(10)
narr[:-2] + narr[2:]

将第n个元素添加到第(n-2)个元素相当于将第m个元素添加到(m + 2)元素(对于数学上的倾斜,我们执行了替换n-> m + 2)。 n的范围是[2,len(arr)),m的范围是[0,len(arr)-2)。注意括号和括号。从0到len(arr)-3的元素(排除最后两个元素)被索引为[:-2],而从2到len(arr)-1的元素(排除前两个元素)被索引为[ 2:]

我假设您已经了解列表推导。