代码之家  ›  专栏  ›  技术社区  ›  int3

在python的for.中使用偏移量访问元素。在回路中

  •  9
  • int3  · 技术社区  · 15 年前

    我一直在和巨蟒混在一起,我觉得使用巨蟒通常更好(或者叫“蟒蛇”)。

    for x in SomeArray:
    

    而不是更C风格的

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

    我确实看到了这方面的好处,主要是更干净的代码,以及使用nice的能力 map() 以及相关功能。然而,我经常遇到这样的情况:我希望同时访问数组中具有不同偏移量的元素。例如,我可能想将当前元素添加到元素后面两步。有没有一种方法可以做到这一点而不借助于明确的索引?

    2 回复  |  直到 15 年前
        1
  •  15
  •   Greg Hewgill    15 年前

    在Python中这样做的方法是:

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

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

        2
  •  6
  •   Christian Alis    15 年前

    列表索引和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 th元素添加到(n-2)th元素等同于将m th元素添加到(m+2)元素(对于数学倾斜的元素,我们执行替换n->m+2)。n的范围是[2,len(arr)),m的范围是[0,len(arr)-2)。注意括号和括号。从0到len(arr)-3的元素(不包括最后两个元素)被索引为[:-2],而从2到len(arr)-1的元素(不包括前两个元素)被索引为[2:]。

    我想你已经知道清单的含义了。