2016-07-30 82 views
-1

我知道這是一個已經有好幾個線程的話題。我已經檢查了他們,並明白這個錯誤的含義,但出於某種原因無法讓我的代碼工作。Python:Int是對象不可訂閱

我試圖編寫一個簡單的Python函數,它將整數列表作爲輸入並輸出列表中的整數,這些整數恰好是列表中前一個整數的兩倍。這裏是我到目前爲止的代碼:

def doubles(lst): 
     i = -1 
     for num in lst: 
      if num == num[i + 1]/2: 
       print(num) 

現在我知道問題是它試圖打印這個整數作爲一個字符串。我已經嘗試編輯代碼的最後一行來說print(str(num)),這不起作用,也不會改變我的if語句在第4行。任何援助將不勝感激!

+0

您的示例中缺少一個增量(的i)操作。 – pyramids

+0

如果你的問題得到解答,你可以選擇答案如下。 – bhansa

回答

3
if num == num[i + 1]/2: 

應該

if num == lst[i + 1]/2: 

另外,我建議使用enumerate遍歷使用索引列表,但有做這樣的事的更好的方法,如圖galaxyan's answer

0

你試圖在列表中標記一個項目,而不是列表本身。相反迭代的項目,你可以遍歷列表中的指標:

def doubles(lst): 
    for i in range(0, len(lst) - 1): 
     if lst[i] == lst[i + 1]/2: 
      print(lst[i]) 
+0

感謝您的快速幫助傢伙。我試着更早地遍歷索引,並遇到另一個錯誤,「列表索引超出範圍」。我只是試了一次,遇到了同樣的問題。有關解決該錯誤的任何提示? – Polyphase29

+0

@Mark arg,off-by-one錯誤:-(請參閱我編輯的答案。 – Mureinik

+1

謝謝! – Polyphase29

1

你可以壓縮原始列表和列表從第二個元素開始,然後比較兩個元素

def doubles(lst): 
    return [ i for i,j in zip(lst,lst[1:]) if j==i*2 ] 

例如:

lst = [1,2,3,5,66,2,4,5] 
print doubles(lst) 
[1, 2]