我正在嘗試完成“Two Sum”,它是這樣的:
撰寫一個函式,該函式接受一個數字陣列(用于測驗的整數)和一個目標數字。它應該在陣列中找到兩個不同的專案,當它們相加時,會給出目標值。這些專案的索引然后應該在一個元組中回傳,如下所示:(index1, index2)。
撇開我的代碼效率不談,這就是我目前所擁有的:
def two_sum(numbers, target):
for i in numbers:
for t in numbers:
if i t == target:
if numbers.index(i) != numbers.index(t):
return (numbers.index(i), numbers.index(t))
return False
它適用于以下輸入:
>>> two_sum([1,2,3,4,5,6,7,8,9,10], 11)
(0, 9)
但是,當我嘗試將重復數字加起來達到目標??的數字串列時,代碼不起作用:
>>> two_sum([2, 2], 4)
False
由于某種我無法弄清楚的原因,該代碼未達到串列的索引 [1],因此回傳False.
這是為什么?
uj5u.com熱心網友回復:
''' return 將打破回圈并退出功能,所以首先你需要完成回圈,將結果存盤在串列中,因為你不能寫入元組,一旦你的回圈完成,將串列轉換為元組并回傳'''
def two_sum(numbers, target):
result = []
for i in numbers:
for t in numbers:
if (i t == target) and (numbers.index(i) != numbers.index(t)):
result.append(i)
result.append(t)
if (len(result)> 0):
return tuple(result)
else:
return False
uj5u.com熱心網友回復:
list 方法index()總是回傳串列中第一次出現的專案,因此numbers.index(i) != numbers.index(t)計算結果為1 != 1which is False。
enumerate()您應該在遍歷串列時使用內置函式來存盤索引。
def two_sum(numbers, target):
for i, number_a in enumerate(numbers):
for j, number_b in enumerate(numbers):
if number_a number_b == target and i != j:
return (i, j)
return False
uj5u.com熱心網友回復:
您的代碼看起來不錯,除了這部分:
if numbers.index(i) != numbers.index(t):
return (numbers.index(i), numbers.index(t))
return False
因為 index 方法只回傳第一次出現的值,所以 i 和 t 總是相同的。它總是回傳 false。值 2 的索引在串列中始終為 0,即使在索引 1 處還有另一個 2。
來源:https ://www.w3schools.com/python/ref_list_index.asp
你想要做的是:
def two_sum(numbers, target):
i_index = 0
t_index = 0
for i in numbers:
for t in numbers:
if i t == target:
if i_index != t_index:
return (i_index, t_index)
t_index =1
i_index =1
return False
這樣索引與值無關
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/425636.html
標籤:python-3.x 列表 数字
上一篇:如何在熊貓中用逗號分隔串列元素
下一篇:遍歷python中的兩個串列
