比较列表中所有相邻元素的Pythonic方法

时间:2016-04-11 13:09:22

标签: python python-3.x

我想知道是否有更多Pythonic方式来执行以下操作:

A = some list
i = 0
j = 1
for _ in range(1, len(A)):
    #some operation between A[i] and A[j]
    i += 1
    j += 1

我觉得这应该/可以做得不同。想法?

编辑: 因为有些人要求要求。我想要一个通用答案。也许检查A [i],A [j]是否在某个范围之间,或者它们是否相等。或许我想做一个"涓涓细流"元素。越普遍越好。

3 个答案:

答案 0 :(得分:6)

itertools中有一个很好的小方法可以做到这一点。作为奖励,它适用于任何可迭代的,而不仅仅是序列。

Windows.Storage.StorageFolder installedLocation = Windows.ApplicationModel.Package.Current.InstalledLocation

如果您还需要索引,那么只需from itertools import tee def pairwise(iterable): "s -> (s0,s1), (s1,s2), (s2, s3), ..." a, b = tee(iterable) next(b, None) return zip(a, b) for current, next_ in pairwise(A): # do something pass 成对迭代器。

enumerate

答案 1 :(得分:3)

操作' +':

A = [A[i+1]+A[i] for i in range(len(A)-1)]

一般:

A = [operation(A[i], A[i+1]) for i in range(len(A)-1)]

答案 2 :(得分:0)

from itertools import islice
A1 = iter(A)
A2 = islice(A,1)
for a1, a2 in zip(A1, A2):
    # do whatever with A[i], A[i+1]

您可以使用普通切片A[1:],但这会使另一个列表浪费内存。现在zip()会发出值,直到shortest迭代器(A2)用完为止。所以不用担心可能的IndexError