2016-01-23 81 views
0

我正在尋找更有效的方法來執行此功能(NO ZIP PLEASE)。希望我能得到一些反饋。我對python相當陌生。但這是我想要的功能:遍歷列表並比較其中的2個元素

遍歷數字列表,並檢查列表中的元素是否有差異2.對於那些差異爲2的元素,將它們追加到列表

輸出應該是這個樣子[[3, 5], [5, 7], [11, 13], [17, 19]]

我嘗試如下:http://goo.gl/qmPkGK

def test(L): 

    g = [] 

    #Traverse entire list starting from index 0 with increments of 1 
    b = L[::1] 
    print(b) 

    #Traverse entire list starting from index 1 with increments of 1 
    c = L[1::1] 
    print(c) 

    #For each element in range of my list given below, 
    for i in range(0,len(L)-1): 

    #checks if element in c minus element in b == 2 
    #if yes, append both elements to k and then append that new list to list g 
    if(abs(c[i]-b[i]) == 2): 
     k = [] 
     k.append(b[i]) 
     k.append(c[i]) 
     g.append(k) 
    print(g) 
test([2,3,5,7,11,13,17,19,23,29]) 

我所做的就是,打破原始列表分爲2個列表,列表b和列表c。對於表b,遍歷整個列表從索引0用的1和用於列表C增量開始,遍歷從索引1與1爲增量開始現在整個列表,我減去在列表中c和元素的元素在列表b中,並檢查它們的差異是否爲2.然後,將它們追加到列表k並在末尾附加到列表g。我計劃在程序中有某種計數器/指針,它遍歷列表,然後找出列表中的數字之間的差異,如果滿足差異2,則追加它們。我試過但我失敗了。謝謝

回答

2
def list_diff_2(lst): 
    return [(lst[i - 1], lst[i]) for i in range(1,len(lst)) if abs(lst[i] - lst[i-1]) == 2] 

這不簡單嗎?

一般來說,我沒有看到任何理由做額外的列表:通常,通過原始列表的一個循環就足夠了。

+0

是的,我知道一個循環就足夠了,但我不知道該怎麼做。如果差異是2,我想比較列表索引中的元素。但不知道如何遍歷它。所以我最終打破了他們。 (:謝謝,我會翻閱你的代碼。 – misheekoh