Python 为什么这种返回索引的方法并不总是有效?

Python 为什么这种返回索引的方法并不总是有效?,python,indexing,Python,Indexing,我正在使用Codewars网站练习一些东西。我认为这与我的问题无关,但代码的目标是找到如下数字: 89 = 8^1 + 9^2 135=1^1+3^2+5^3 此代码几乎适用于所有测试用例,但有一个测试失败,其中b>2000: def sum_dig_pow(a, b): list = [] for i in range (a, b + 1): digitlist = [int(x) for x in str(i)] sum = 0

我正在使用Codewars网站练习一些东西。我认为这与我的问题无关,但代码的目标是找到如下数字: 89 = 8^1 + 9^2 135=1^1+3^2+5^3

此代码几乎适用于所有测试用例,但有一个测试失败,其中b>2000:

def sum_dig_pow(a, b):
    list = []
    for i in range (a, b + 1):
        digitlist = [int(x) for x in str(i)]
        sum = 0
        for x in digitlist:
            sum += x**(int(digitlist.index(x)) + 1)
        if sum == i:
            list.append(i)
    print list 
鉴于此代码适用于所有测试:

def sum_dig_pow(a, b):
    list = []
    for i in range (a, b + 1):
        digitlist = [int(x) for x in str(i)]
        sum = 0
        digicounter = 1
        for x in digitlist:
            sum += x**digicounter
            digicounter += 1
        if sum == i:
            list.append(i)
    print list 
唯一的区别是我使用a计数器返回x的索引,而不是使用索引(x)获取它

有人能解释为什么第一个代码不总是有效的吗?一般来说,当我需要引用这样一个列表中某个项目的索引时,我似乎很难。。。最后像我一样只用了一个计数器/


(另外,我知道有更多的python和高效的方法来执行此任务,我只是还不是很好。)

您的第一个函数不会找到像
1676
2427
这样的数字,因为它们包含重复的数字,
.index()
只返回列表项的第一次出现


此外,不要使用
list
作为变量名,它会隐藏内置名称。

digicounter
保留准确的索引
list.index()
只查找第一个实例的索引,因此,如果您的数字出现多次,则该数字的第二个或更高版本的索引将“错误”。更好的主意是:使用
enumerate()
为您提供索引。看起来我需要弄清楚enumerate的作用。谢谢