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

2022-07-06 12:51:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我在用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和有效的方式来执行这项任务,我只是还不是很好。)


Tags: 代码inforifdefrangelistintsumdigappendstrpowdigitlistdigicounter
1条回答
网友
1楼 ·

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

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