Python 为什么此代码不适用于特定类型的数据?

Python 为什么此代码不适用于特定类型的数据?,python,python-3.x,for-loop,if-statement,sum,Python,Python 3.x,For Loop,If Statement,Sum,我的代码适用于所有类型的数据,除非它在数字之前或之后遇到相同的数字。对于其他10个,该指数不变。为什么?list.index函数将只返回最靠近列表开头的指定对象的索引。您可以改为使用在每个对象索引旁边的列表中进行迭代: def find_even_index(arr): for a in arr: b = arr.index(a) if sum(arr[b+1:]) == sum(arr[:b]): return b ret

我的代码适用于所有类型的数据,除非它在数字之前或之后遇到相同的数字。对于其他10个,该指数不变。为什么?

list.index函数将只返回最靠近列表开头的指定对象的索引。您可以改为使用在每个对象索引旁边的列表中进行迭代:

def find_even_index(arr):
    for a in arr:
        b = arr.index(a)
        if sum(arr[b+1:]) == sum(arr[:b]):
            return b
    return -1

find_even_index([20,10,30,10,10,15,35])
>>> -1
输出:

def find_even_index(arr):
    for i, a in enumerate(arr): # For index, number in arr
        b = i
        if sum(arr[b+1:]) == sum(arr[:b]):
            return b
    return -1

print(find_even_index([20,10,30,10,10,15,35]))
list.index函数将仅返回最靠近列表开头的指定对象的索引。您可以改为使用在每个对象索引旁边的列表中进行迭代:

def find_even_index(arr):
    for a in arr:
        b = arr.index(a)
        if sum(arr[b+1:]) == sum(arr[:b]):
            return b
    return -1

find_even_index([20,10,30,10,10,15,35])
>>> -1
输出:

def find_even_index(arr):
    for i, a in enumerate(arr): # For index, number in arr
        b = i
        if sum(arr[b+1:]) == sum(arr[:b]):
            return b
    return -1

print(find_even_index([20,10,30,10,10,15,35]))

写下@Barmar在评论+1中建议的解决方案:

3
或者,如果我们想避免如此多的求和调用,并充分利用enumerate,我们可以尝试:

def find_even_index(array):
    for index in range(len(array)):
        if sum(array[:index]) == sum(array[index + 1:]):
            return index

    return -1

print(find_even_index([20, 10, 30, 10, 10, 15, 35]))

写下@Barmar在评论+1中建议的解决方案:

3
或者,如果我们想避免如此多的求和调用,并充分利用enumerate,我们可以尝试:

def find_even_index(array):
    for index in range(len(array)):
        if sum(array[:index]) == sum(array[index + 1:]):
            return index

    return -1

print(find_even_index([20, 10, 30, 10, 10, 15, 35]))

arr.indexa返回与a匹配的第一个索引。如果存在重复项,它不会达到您预期的效果。为什么要在元素上循环?只需在rangelenarr:Thank you@Barmar中循环索引:对于b,您是最好的:arr.indexa返回与a匹配的第一个索引。如果存在重复项,它不会达到您预期的效果。为什么要在元素上循环?只需循环索引:对于rangelenarr中的b:谢谢@Barmar,你是最好的:如果你不使用a,为什么要使用enumerate?@Barmar我经常看到这种情况。如果你不使用a,为什么要使用enumerate?@Barmar我经常看到这种情况。