
有一个 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]) 1 mayorbryant Mar 18, 2019 其他方法也是利用索引来实现的,这个已经是很简洁的方式了 |
2 lxy42 Mar 18, 2019 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]: |
3 fngtz Mar 18, 2019 via iPhone collections.deque |
4 Cl2ex Mar 18, 2019 for p in zip(l,l[1:]): print p |
5 weeevv Mar 18, 2019 via Android [x for x in zip(l[:-1],l[1:,])] |
6 kaneg Mar 18, 2019 不用索引: last = None for i in l: if last: print '[%s,%s]' % (last, i) last = i |
7 fngtz Mar 18, 2019 via iPhone 之前我没回答清楚。 这个问题最方便当然是 zip 列表推导式,但是别人问不要索引啊!就是说 l 是个迭代器。 那本质上就是个单向链表,循环里存上一个值呗。 |
8 xpresslink Mar 18, 2019 如果使用直线性思维模式: >>> 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)] >>> |
9 Raisu Mar 18, 2019 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] 用一直变量保存前一个数,大概这样可以? |
10 ruoyu0088 Mar 18, 2019 via Android |
11 di94sh Mar 18, 2019 ```python l = [1, 3, 5, 7, 11, 13, 17] x = zip(l[0:-1], l[1:]) print(list(x)) ``` |
12 darknoll Mar 18, 2019 >>> def fn(l): ... if len(l) < 2: ... return ... i,*args = l ... yield (i, args[0]) ... fn(args) |
15 xpresslink Mar 18, 2019 @fngtz 仔细看一下我#8 我写的,也算是一位吧 |
16 cxyfreedom Mar 18, 2019 via iPhone @ruoyu0088 长见识了,很 pythonic |
17 shn7798 Mar 18, 2019 @xpresslink 看了下,跟 pairwise 原理一样,不过相比之下就不 pythonic 了哈哈 |
18 xpresslink Mar 18, 2019 @shn7798 用那个 tee 我知道,我只是为演示一下最本质的东西,没必要多 import 一下。 |