Python3 如何做到操作一次迭代两次

2019 年 3 月 18 日
 zscself

有一个 List

l = [1, 3, 5, 7, 11, 13, 17]

现在想通过迭代输出成如下:

[1, 3]
[3, 5]
[5, 7]
[7, 11]
[11, 13]
[13, 17]

除了用索引还有其他办法吗?

for i in range(len(l)-1):
	print(l[i:i+2])
4892 次点击
所在节点    Python
18 条回复
mayorbryant
2019 年 3 月 18 日
其他方法也是利用索引来实现的,这个已经是很简洁的方式了
lxy42
2019 年 3 月 18 日
In [143]: l = [1, 3, 5, 7, 11, 13, 17]

In [144]: for i, j in zip(l[:-1], l[1:]):
...: print(i, j)
...:
1 3
3 5
5 7
7 11
11 13
13 17

In [145]:
fngtz
2019 年 3 月 18 日
collections.deque
Cl2ex
2019 年 3 月 18 日
for p in zip(l,l[1:]):
print p
weeevv
2019 年 3 月 18 日
[x for x in zip(l[:-1],l[1:,])]
kaneg
2019 年 3 月 18 日
不用索引:

last = None
for i in l:
if last:
print '[%s,%s]' % (last, i)
last = i
fngtz
2019 年 3 月 18 日
之前我没回答清楚。

这个问题最方便当然是 zip 列表推导式,但是别人问不要索引啊!就是说 l 是个迭代器。

那本质上就是个单向链表,循环里存上一个值呗。
xpresslink
2019 年 3 月 18 日
如果使用直线性思维模式:
>>> l = [1, 3, 5, 7, 11, 13, 17]
>>> i = iter(l)
>>> j = iter(l); next(j)
1
>>> list(zip(i,j))
[(1, 3), (3, 5), (5, 7), (7, 11), (11, 13), (13, 17)]
>>>
Raisu
2019 年 3 月 18 日
l = [1, 3, 5, 7, 11, 13, 17]

pre = l[0]
for i in range(1, len(l)):
print([pre, l[i]])
pre = l[i]

用一直变量保存前一个数,大概这样可以?
ruoyu0088
2019 年 3 月 18 日
文档里面有,在下面的页面搜索 pairwise

https://docs.python.org/3.7/library/itertools.html
di94sh
2019 年 3 月 18 日
```python
l = [1, 3, 5, 7, 11, 13, 17]
x = zip(l[0:-1], l[1:])
print(list(x))
```
darknoll
2019 年 3 月 18 日
>>> def fn(l):
... if len(l) < 2:
... return
... i,*args = l
... yield (i, args[0])
... fn(args)
fngtz
2019 年 3 月 18 日
@ruoyu0088 找到一位真 pythoneer
fcfangcc
2019 年 3 月 18 日
@ruoyu0088 厉害,学习了
xpresslink
2019 年 3 月 18 日
@fngtz 仔细看一下我#8 我写的,也算是一位吧
cxyfreedom
2019 年 3 月 18 日
@ruoyu0088 长见识了,很 pythonic
shn7798
2019 年 3 月 18 日
@xpresslink 看了下,跟 pairwise 原理一样,不过相比之下就不 pythonic 了哈哈
xpresslink
2019 年 3 月 18 日
@shn7798 用那个 tee 我知道,我只是为演示一下最本质的东西,没必要多 import 一下。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/545716

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX