此代码应返回元素的索引,该索引被相等的元素之和包围
def find_even_index(arr):
for elem in arr:
i = arr.index(elem)
if sum(arr[:i]) == sum(arr[i+1:]):
return i
else:
pass
print find_even_index([1,2,3,4,3,2,1])
print find_even_index([20,10,30,10,10,15,35])
它返回
3
没有
而不是无应该返回 3 ,但不会。为什么?
答案 0 :(得分:0)
您的问题是arr.index(elem)
仅返回列表elem
中arr
的第一个索引。
演示:
>>> lst = [1, 2, 3, 1, 2]
>>> lst.index(1)
0
>>> lst.index(2)
1
>>> lst.index(3)
2
使用enumerate
来遍历列表时跟踪索引,就像这样:
def find_even_index(arr):
for i, _ in enumerate(arr):
if sum(arr[:i]) == sum(arr[i+1:]):
return i
print(find_even_index([1,2,3,4,3,2,1])) # 3
print(find_even_index([20,10,30,10,10,15,35])) # 3
答案 1 :(得分:0)
尝试一下。它倾向于工作,只是我使用递归而不是循环
def func(array, i):
if sum(array[:i]) == sum(array[i+1:]):
return i
else:
a = i + 1
return func(array, a)
print(func([20,10,30,10,10,15,35], 0)) #produces 3 as the answer
答案 2 :(得分:0)
第二种情况的问题是,当您进行第四次迭代时,脚本将执行i = arr.index(10)
。您希望它返回3
,但是list.index()
在列表中的位置{1}中找到10
的 first 实例。在这种情况下,您不需要实际上并不是要遍历列表的 elements ,而是要遍历其索引。试试这个:
def find_even_index(arr):
for i in range(len(arr)):
if sum(arr[:i]) == sum(arr[i+1:]):
return i
答案 3 :(得分:0)
您的代码中的问题是,在您第二次调用{{时,如果arr.index(elem)
等于10,elem
总是返回1({{1}中arr
的第一索引) 1}}。所以它不能工作。
我建议您采用以下解决方案,直接在索引上而不是在列表的值上进行迭代:
elem