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

时间:2017-07-11 16:15:52

标签: 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
        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 

唯一的区别是我用一个计数器来返回x的索引,而不是用索引(x)来获取它。

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

(另外,我知道有更多的pythonic和有效的方法来执行这项任务,我还不是很好。)

1 个答案:

答案 0 :(得分:0)

您的第一个功能无法找到16762427等数字,因为它们包含重复的数字,.index()会返回首次出现的数字仅列出项目。

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