2016-04-05 28 views
-5

我對Python很陌生。 作爲我的代碼的一部分,我需要一個函數,檢查列表中的元素,並忽略它,如果每個元素與之前/之間的差異恰好爲1的差異。例如:如何在此處檢查列表中的元素

[1,2,5 10]是無效

[9,14,19,18]無效

[3,6,9,20]爲有效

這裏是我的代碼:

def code(self): 

      for line,lists in enumerate(permutations(range(4))): 
       valid_list = [] 
       for index,elements in enumerate(lists) : 
        if index != len(lists)-1: #list index out of range escape condition 
         if lists[index] - lists[index+1] == 1 or lists[index+1] - lists[index] == 1 : 
          break 


        valid_list.append(lists) 


      return good_items 

所以我 想要檢查「排列列表」的元素,如果它們是好的,將該列表追加到「valid_list」作爲最終返回,但我努力這樣做。我不知道應該在哪裏放置valid_list.append(lists)當我確定了所有3個元素(最後一個不需要)時,它會被追加。

我將不勝感激一些幫助:3

P.S:所以這裏的東西,我知道該算法是可怕的,實際的代碼是一樣糟糕,我只是想知道如何使它發揮作用。 改進代碼的建議廣泛讚賞,但不完全是我正在尋找的:3

+2

你的問題是什麼?如何檢查你正在描述的條件,如何追加到列表或如何使用描述性名稱'code'修復該函數? – timgeb

+0

@timgeb 我無法得到預期的結果。從排列函數中生成了24個列表,其中2個符合我的條件: [1,3,0,2]和[2,0,3, 1] 但是當我運行這個代碼時,我得到一個空的列表,或[3,2,1,0](迭代結束時的最後一個列表),這兩個顯然都不是答案。 我想知道如何解決這個問題。 –

回答

0

valid_list的定義應該在for循環之外,否則將被覆蓋。此外,請使用flag_valid來指示是否存在無效元素。試試這個代碼:

from itertools import permutations 

def code(): 
    valid_list = [] 
    for line,lists in enumerate(permutations(range(4))):   
     flag_valid = True 
     for index,elements in enumerate(lists): 
      if index != len(lists) - 1: #list index out of range escape condition 
       if abs(lists[index] - lists[index + 1]) == 1: 
        flag_valid = False 
        break; 
     if flag_valid == True: 
       valid_list.append(lists) 
    return valid_list 

print code() 
+0

非常感謝。我現在明白了:3 –

相關問題