1
binux 2014 年 8 月 24 日 zip(list[::2], list[1::2])
|
2
raquelken 2014 年 8 月 24 日 a = [1,2,3,4,5,6,7,8]
zip(a[0:-1:2], a[1:-1:2]) |
4
exoticknight 2014 年 8 月 24 日
binux果然是python高手……
|
5
wy315700 2014 年 8 月 24 日
学习了,顺便收藏
|
6
imn1 2014 年 8 月 24 日 这个解决方案很多,像zip、itertools等等
我遇到这种问题常在数据分析中,通常都已经import了numpy、pandas,所以常用其中的方法来变形数列~ |
7
magine 2014 年 8 月 24 日
虽然有点不礼貌,但是建议楼主先读一下《python基础教程》之类的书。
当然如果没打算长期使用就当我没说。 |
8
starsoi 2014 年 8 月 24 日 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 年 8 月 24 日
>>> lst = [1,2,3,4,5,6,7,8]
>>> zip(*[iter(lst)]*2) [(1, 2), (3, 4), (5, 6), (7, 8)] |
10
hit9 2014 年 8 月 24 日
|
11
starsoi 2014 年 8 月 24 日
@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 年 8 月 25 日
两者的开销差貌似只有" 放到list中再unpack到args中"
|