2016-03-28 39 views
1

我有一個列表將始終包含偶數個元素 ,我想遍歷此列表以創建包含列表中每個2個連續數字的 列表的新列表。在迭代中對列表中的連續元素進行配對

例如:

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

當我遍歷列表我無法弄清楚如何選擇連續配對。我已經嘗試了一百萬次的變化,這是我最近的一次。

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語句而高興。我想說這不是必要的,但重新閱讀這篇文章,我認爲你是唯一注意(並正確實施)這個需求的人! (你可能想要放一個'或'檢查,以防它們倒過來,例如'(7,6)')。 –

0

你我們快到了。你需要使用更多的範圍參數。

簡單的解決方法:

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

的參數rangerange(start, stop[, step])並告訴它從零啓動到的長度-1,並使用兩個步驟。

相關問題