函数返回None而不是index

时间:2018-06-27 11:53:05

标签: python function

此代码应返回元素的索引,该索引被相等的元素之和包围

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 ,但不会。为什么?

4 个答案:

答案 0 :(得分:0)

您的问题是arr.index(elem)仅返回列表elemarr的第一个索引。

演示:

>>> 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