2016-03-28 4 views
1

常に偶数の要素を含むリスト をリストに入れて、このリストを反復して、リスト内の2つの連続する数字のリストをそれぞれ のリストとして作成します。例えば反復中にリストの連続する要素をペアにする

:私は連続したペアを選択する方法を見つけ出すことはできませんリストを反復

first_list = [1,2,3,4,5,6,7,8] 
second_list = [[1,2], [3,4], [5,6], [7,8]] 

。私は100万のバリエーションを試しましたが、これは私が来たものの中で最も近いものです。

first_list = [1,2,3,4,5,6,7,8]  
second_list = [] 

pairs = 1 

for item in range(len(first_list) - pairs): 
    second_list.append([firs_list[item],first_list[item + pairs]]) 
print second list 

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

forループが他のすべてのアイテムに対して繰り返し処理される方法はありますか?

+0

^あなたの問題のためにきれいに動作する一般的な解決策があります。 (ちょうどn = 2を設定してハードコードし、リストの理解度のバージョンを使用してください) –

答えて

0

itertoolsモジュールの機能を組み合わせることができます。最も外側のmapがなければ、タプルのリストを返し、mapはリストのリストに変換:

>>> from itertools import cycle, compress, izip 
>>> 
>>> lst = [1,2,3,4,5,6,7,8] 
>>> map(list, izip(compress(lst, cycle([1, 0])), compress(lst, cycle([0, 1])))) 
[[1, 2], [3, 4], [5, 6], [7, 8]] 
1

このコードはそれを行う必要があります。

first_list = [1,2,3,4,5,6,7,8]  
second_list = [] 
for i in range(0,len(first_list)-1,2): 
    if first_list[i]+1==first_list[i+1]: 
     second_list.append([first_list[i],first_list[i+1]]) 
print second_list 

は出力:

[[1, 2], [3, 4], [5, 6], [7, 8]] 
+1

これは面白いですが、OPの質問とは異なる結果です。原稿が重ならない間は、ペアが重なり合っていることに注意してください([1、** 2 **]、[** 2 **、3])。 –

+0

ありがとうございました – denis

+0

今よく見えます。実際、if文のためにupvoteする唯一の答えです。私はそれが必要ではないと言うつもりだったが、ポストを読んで、あなたはその要件に気づいた(正しく実装した)唯一の人だと思う! ( '(7、6)'のように逆順になっている場合に ''チェックを入れたいかもしれません。) –

0

あなたをもうすぐだ。範囲のためにもっと引数を使う必要がありました。

簡単な修正:range

for item in range(0, len(first_list) - 1, 2): 
    second_list.append([first_list[item],first_list[item + 1]]) 
print second_list 

引数はrange(start, stop[, step])であり、長さ-1まで、ゼロからスタートし、2のステップを使用するよう指示します。

関連する問題