2016-03-28 15 views
1

Her zaman eşit sayıda öğe içeren bir liste var ve listenin her 2 ardışık sayısının listelerini içeren yeni bir liste oluşturmak için bu listede yinelemek istiyorum. ÖrneğinYinelenen öğeleri bir listede yineleyin

: Ben ardışık çiftlerini nasıl seçileceğini bilemiyorum liste yineleme

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

. Bir milyon varyasyonu denedim ve bu, geldiğim en yakın şey.

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]] 

Tüm diğer öğeler için for döngüsü yinelemeye sahip olmanın bir yolu var mı?

+0

^En iyi cevap, probleminiz için düzgün bir şekilde çalışacak genel bir çözümdür. (Sadece set veya hard-code n = 2 ve liste anlama sürümünü kullanın.) –

cevap

0

itertools modülünden işlevleri birleştirebilirsiniz. dıştaki map olmadan dizilerini listesini döndürür ve map listelerin bir listeye dönüştürür:

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

Bu kod gerçekleştirmeliyiz:

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 

çıkışı:

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

Bu ilginç ancak OP'nin istediği farklı bir sonuç. Aslına bakarsanız, çiftlerinizin üst üste geldiğine dikkat edin ([1, ** 2 **], [** 2 **, 3]). –

+0

Teşekkür ederiz – denis

+0

Şimdi iyi görünüyor. Aslında, if ifadenizden dolayı alacağım tek cevap bu. Gerekmediğini söyleyecektim ama yazıyı yeniden okurken bence siz bu gereksinimi farkeden (ve doğru bir şekilde uygulayan) tek kişi sensin! (Tersine, '(7, 6) 'gibi tersine çevrildiklerinde bir' veya 'işareti koymak isteyebilirsiniz.) –

0

You neredeyse geldik. Aralık için daha fazla argüman kullanmanız gerekiyordu.

Basit düzeltme:

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

argümanlar range için range(start, stop[, step]) ve uzunluk-1'e kadar sıfırdan başlayıp ikisinin bir adım kullanmak için bunu söylemek.

İlgili konular