2017-01-18 13 views
0

私はリストL = [1,2,3,4,5,6]を持っていると私は次のようにペアを取得する必要があります。Pythonのリストから2つの繰り返し値を読み取るには?

[1,2] , [2,3], [3,4], [4,5], [5,6] 

私の現在のソリューションは、2つのユーティリティリストを作成することです:

U1 = [1,2,3,4,5] 
U2 = [2,3,4,5,6] 

および所望の結果を得るために、機能に組み込まれzipを使用。

これを達成するためのよりよい方法はありますか?

答えて

3

にforループよりもはるかに高速になります。

L = [1,2,3,4,5,6] 

for i in zip(L, L[1:]): 
    print(list(i)) 
# [1, 2] 
# [2, 3] 
# [3, 4] 
# [4, 5] 
# [5, 6] 

これは期待通りに機能します。これは、反復可能性がなくなるとただちにzipが停止するためです。

for i in map(list, zip(L, L[1:])): 
    print(i) 

するか、したい場合は、全体の事はリストのリストに変換する:

あなたは、さらにすぐにアイテムを変換するmapを使用することができ、あなたのリストがある場合は

list(map(list, zip(L, L[1:]))) 
# [[1, 2], [2, 3], [3, 4], [4, 5], [5, 6]] 

私は[1:]でスライスしたので、新しいリストを作成するのは本当に長いですが、これは高価になる可能性があります。itertools.islice

for i in zip(L, islice(L, 1, None)): 
    print(list(i)) 
1

リストの内包を使用します。

[[L[i], L[i+1]] for i in range(len(L)-1)] 

通常、リストの内包は、ユーティリティのリストとあなたのソリューションのようなものだが、少し短いことのpython

+0

リスト内包されている**通常**だけ速く反復でリストを構築する上で、しかし、他の目的のための反復の場合には速くはありません。http://stackoverflow.com/questions/22108488/are-list - 理解と機能機能 - ループより速い –

関連する問題