Python 有没有一种简单的方法来获取for循环中的next和prev值?

Python 有没有一种简单的方法来获取for循环中的next和prev值?,python,for-loop,iteration,Python,For Loop,Iteration,那么…在Python中使用for循环进行迭代时,有没有一种简单的方法可以获取下一个和上一个值 我知道,如果您执行以下操作,这很容易做到: a = [3,4,5,6,3,4,5] for x in range(len(a)): next = a[x+1] 但是关于: for x in a: x.next?? 我所知道的最简单的方法是 for x,next in zip (a, a[1:]): # now you have x and next available 下面是一

那么…在Python中使用for循环进行迭代时,有没有一种简单的方法可以获取下一个和上一个值

我知道,如果您执行以下操作,这很容易做到:

a = [3,4,5,6,3,4,5]
for x in range(len(a)):
    next = a[x+1]
但是关于:

for x in a:
    x.next??

我所知道的最简单的方法是

for x,next in zip (a, a[1:]):
  # now you have x and next available

下面是一个常见的模式,我使用它来迭代序列中的项目对:

>>> a = range(10)
>>> for i, j in zip(a, a[1:]):
...  print i, j
... 
0 1
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 9
如果需要三项(上一项、下一项),可以执行以下操作:

>>> for i, j, k in zip(a, a[1:], a[2:]):
...  print i, j, k
... 
0 1 2
1 2 3
2 3 4
3 4 5
4 5 6
5 6 7
6 7 8
7 8 9
i
是前一个元素,
j
是当前元素,
k
是下一个元素

当然,这从1开始,到8结束。最后你应该收到什么作为上一个/下一个?也许
?这可能是最容易做到的:

>>> a = [None] + a + [None]
>>> for i, j, k in zip(a, a[1:], a[2:]):
...  print i, j, k
... 
None 0 1
0 1 2
1 2 3
2 3 4
3 4 5
4 5 6
5 6 7
6 7 8
7 8 9
8 9 None

您总是可以将
a
转换为具有的迭代器,然后对其进行迭代。这将允许您在循环内部使用,以推进正在迭代的迭代器:

>>> a = [3,4,5,6,3,4,5]
>>> it = iter(a)
>>> for i in it:
...     j = next(it, None)
...     print('i={}, j={}'.format(i, j))
...
i=3, j=4
i=5, j=6
i=3, j=4
i=5, j=None
>>>
此外,如果没有下一个项目,则其中的
None
是要返回的默认值。不过,您可以将其设置为您想要的任何值。省略参数将导致引发
StopIteration
异常:

>>> a = [1, 2, 3, 4, 5]
>>> it = iter(a)
>>> for i in it:
...     j = next(it)
...     print('i={}, j={}'.format(i, j))
...
i=1, j=2
i=3, j=4
Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
StopIteration
>>>
>a=[1,2,3,4,5]
>>>it=国际热核实验堆(a)
>>>对我来说:
...     j=下一个(it)
...     打印('i={},j={}'。格式(i,j))
...
i=1,j=2
i=3,j=4
回溯(最近一次呼叫最后一次):
文件“”,第2行,在
停止迭代
>>>

如果希望每个迭代的
上一个
下一个
元素都是循环序列:

a = [3,4,5,6,3,4,5]
l = len(a)

for k, v in enumerate(a):
    print a[(k-1)%l], v, a[(k+1)%l] #prints previous, current, next elements
这也很简单:

>>> a = [3,4,5,6,3,4,5]
>>> for i in range(1,len(a)):
...     print a[i-1],a[i]
... 
3 4
4 5
5 6
6 3
3 4
4 5

可能有点过头了,但我有时会为此使用以下更通用的生成器,它会在列表或其他可编辑文件上生成任意大小的“窗口”序列。(窗口大小必须小于iterable的长度。)


你能举个例子吗?如果
x=4
,您期望的输出是什么?那么对于第二个代码段,假设x在索引1处命中4,是否有一个返回5的内置函数?@pyramidface:您的问题相当抽象。您希望如何处理下一个和上一个值?你如何得到它们可能取决于你想用它们做什么。有用的问题。Java实现了这样的流。Python没有。我故意让它开放。我只是想知道python中是否有一个内置函数,您可以轻松地使用它来获取下一个值。一个用法示例是查看字符串中的下一个值是字母还是数字。我以前从未见过这种用法。谢谢分享。
def sliding_window(iterable, size):
    try:                    # indexed iterable
        for i in range(len(iterable) - size + 1):
            yield iterable[i:i+size]
    except TypeError:       # iterator
        window = [next(iterable) for _ in range(size)]
        yield window
        for item in iterable:
            window = window[1:] + [item]
            yield window

a = [3,4,5,6,3,4,5]
for current, following in sliding_window(a, 2):
    print(current, following)