我需要撰寫回傳陣列的 2 個索引號的代碼。該函式接受 2 個引數,一個是陣列,另一個是整數。
我需要檢查陣列中的兩個值是否加起來為整數,并且只使用陣列中的數字一次。
這是我的代碼:
def func(a,b):
for i in a:
cnt = 0
while cnt < len(a):
if i a[cnt] == b and i != a[cnt]:
return list([i,a[cnt]])
else:
cnt = 1
print(func([3,7,2,10,20],27))
我的輸出func([3, 7, 2, 10, 20], 27)是[7, 20].
此代碼顯示回圈可以找到加起來為整數的數字。
但是當我這樣做時:
def func(a,b):
for i in a:
cnt = 0
while cnt < len(a):
if i a[cnt] == b and i != a[cnt]:
return a.index(i,a[cnt])
else:
cnt = 1
print(func([3,7,2,10,20],27))
我明白了Value error: 7 not in list,這顯然是。
我在使用其他練習時也遇到過這個問題。
我是不是做錯了什么,或者索引函式不應該這樣使用。
回傳索引號而不必為其撰寫另一個回圈的有效方法是什么?
uj5u.com熱心網友回復:
到第二個引數index是你傳遞實際上是在其中的元素的搜索將開始(因為你可以看到串列上的開始索引位置)。如果您洗掉它,您將看到它回傳您想要的第一個值(但不是第二個)。需要注意的是,該index方法只會回傳該值的第一次出現。
def func(a,b):
for i in a:
cnt = 0
while cnt < len(a):
if i a[cnt] == b and i != a[cnt]:
return a.index(i)
else:
cnt = 1
print(func([3,7,2,10,20],27))
>>> 1
發生這種情況是因為您作為起始索引 ( a[cnt])傳遞的值大于數字的實際索引 ( 1)。
通過洗掉它,您可以搜索所有串列,并找到正確的值(記住 Python 使用零索引迭代器)。
但是由于您想回傳一個包含兩個值的串列,您需要明確說明您想要每個值的索引,例如:
def func(a,b):
for i in a:
cnt = 0
while cnt < len(a):
if i a[cnt] == b and i != a[cnt]:
return [a.index(i), a.index(a[cnt])]
else:
cnt = 1
print(func([3,7,2,10,20],27))
>>> [1, 4]
for但是,您可以使用兩個回圈以更簡潔的方式獲得相同的結果(還為變數指定了有意義的名稱):
def find_indices_for_sum(array, sum_value):
for i in array:
for j in array:
if i j == sum_value and i != j:
return [array.index(i), array.index(j)]
print(find_indices_for_sum([3,7,2,10,20],27))
>>> [1, 4]
如果您希望能夠處理相等的數字,您可以完全改變比較策略,使用索引而不是值,因為前者在串列中是唯一的,而后者不是。enumerate在這里是一個不錯的選擇,因為它允許以干凈的方式同時迭代索引和值。
def find_indices_for_sum(array, sum_value):
for i, value_i in enumerate(array):
for j, value_j in enumerate(array):
if i != j and value_i value_j == sum_value:
return [i, j]
print(find_indices_for_sum([3,3],6))
>>> [0, 1]
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/337862.html
