我一直在使用Python,我已经收集到它通常更好(或'pythonic')使用
for x in SomeArray:
而不是更多的C风格
for i in range(0, len(SomeArray)):
我确实看到了这方面的好处,主要是更清晰的代码,以及使用漂亮的map()
和相关功能的能力。但是,我经常遇到这样的情况:我想同时访问数组中不同偏移的元素。例如,我可能想要将当前元素添加到元素后面两步。有没有办法在不诉诸显式指数的情况下做到这一点?
答案 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:]
我假设您已经了解列表推导。