2016-11-08 171 views
0

我想寫一個列表或數組中的Python函數。如果列表或數組中的任何兩個數字等於零,我想返回這兩個數字的位置。Python列表:如果一對數字等於0返回元素的位置

這是我到目前爲止。我通過列表循環,並有相同列表的嵌套循環來測試如果外部迭代器加嵌套迭代器== 0:如果是的話我試圖返回兩個數字== 0的位置,但它只是反而給我實際的兩個數字。下面的輸出(即使它不是我想要的)應該是(3,-3),這有什麼奇怪的。任何投入將不勝感激

def twosum(nums): 
    for x in nums: 
     for y in nums: 
      if x + y == 0: 
       return nums[x],nums[y] 
print twosum([1, 3, 5, -3]) 
output = (-3, 3) 
+0

如果'x'是'nums'的一個元素,那麼'nums [x]'是什麼?如果你不記得,請回到你的課程材料中,查看括號內的內容。 – user2357112

+0

@ user2357112我知道這是一個索引,但我會認爲第一個數字應該是3而不是-3。 – ziggy

+1

@ziggy:如果'x'爲3,那麼'nums [x]'是什麼?它不是3. – user2357112

回答

3

你必須使用enumerate()同時遍歷目錄,如:

def twosum(nums): 
    for i, x in enumerate(nums): 
     for j, y in enumerate(nums): 
      if x + y == 0: 
       return i, j 

然而這個邏輯可以進一步優化的:

def twosum(nums): 
    for i, x in enumerate(nums): 
     if -x in nums[i:]: # check '-'ive of the number in non-iterated list 
      return x, -x 
+1

這是更好的答案,它不會向性能添加額外的線性組件,並且會處理列表中的重複項。 – user3030010

1

你會做return nums.index(x), nums.index(y)

+0

ahh是的,這將工作 – ziggy

+0

技術上的工作,但使用'索引'是一個壞習慣進入。它需要重新掃描列表以查找元素,如果在循環中重複執行,這是不必要的,並且災難性地變慢。 – user2357112

相關問題