
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中" |