1
binux 2014-08-24 13:13:33 +08:00 4
zip(list[::2], list[1::2])
|
2
raquelken 2014-08-24 13:15:05 +08:00 1
a = [1,2,3,4,5,6,7,8]
zip(a[0:-1:2], a[1:-1:2]) |
4
exoticknight 2014-08-24 13:51:39 +08:00
binux果然是python高手……
|
5
wy315700 2014-08-24 15:34:42 +08:00
学习了,顺便收藏
|
6
imn1 2014-08-24 19:09:06 +08:00 1
这个解决方案很多,像zip、itertools等等
我遇到这种问题常在数据分析中,通常都已经import了numpy、pandas,所以常用其中的方法来变形数列~ |
7
magine 2014-08-24 19:12:39 +08:00
虽然有点不礼貌,但是建议楼主先读一下《python基础教程》之类的书。
当然如果没打算长期使用就当我没说。 |
8
starsoi 2014-08-24 19:48:12 +08:00 1
b=iter(a)
[(x, b.next()) for x in b] 速度比上面的zip快,尤其是当a很大的时候 Python 2.7.3 >>> timeit('zip(a[::2], a[1::2])', setup='a=[1,2,3,4,5,6,7,8]', number=10000) 0.00456690788269043 >>> timeit('[(x, b.next()) for x in b]', setup='a=[1,2,3,4,5,6,7,8];b=iter(a)', number=10000) 0.0014100074768066406 >>> timeit('zip(a[::2], a[1::2])', setup='a=range(100000)', number=10000) 21.61440110206604 >>> timeit('[(x, b.next()) for x in b]', setup='a=range(100000);b=iter(a)', number=10000) 0.022505998611450195 |
9
hit9 2014-08-24 21:26:39 +08:00
>>> lst = [1,2,3,4,5,6,7,8]
>>> zip(*[iter(lst)]*2) [(1, 2), (3, 4), (5, 6), (7, 8)] |
10
hit9 2014-08-24 21:27:48 +08:00
|
11
starsoi 2014-08-24 23:19:41 +08:00
@hit9 zip(*[iter(lst)]*2) 太慢了
>>> timeit('zip(*[iter(a)]*2)', setup='a=range(100000);b=iter(a)', number=10000) 18.37099289894104 受你的启发,这样可读性更高,而且也超快: b=iter(a) zip(b,b) >>> timeit('zip(b,b)', setup='a=range(100000);b=iter(a)', number=10000) 0.022648096084594727 |
13
hit9 2014-08-25 12:20:44 +08:00
两者的开销差貌似只有" 放到list中再unpack到args中"
|