Ich übe einige Sachen mit der Codewars-Website. Ich denke nicht, dass es für meine Frage relevant ist, aber - Das Ziel des Codes ist, Zahlen wie folgt zu finden: 89 = 8^1 + 9^2 135 = 1^1 + 3^2 + 5^3Warum funktioniert diese Methode zum Zurückgeben des Index nicht immer?
Dieser Code funktioniert mit fast allen Testfällen, aber nicht ein Test, bei dem 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
Während dieser Code für alle Tests gearbeitet:
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
der einzige Unterschied besteht darin, dass Ich habe den a-Zähler verwendet, um den Index von x zurückzugeben, anstatt ihn mit Index (x) zu erhalten.
Kann jemand erklären, warum der erste Code nicht immer funktioniert? Im Allgemeinen scheint es mir schwer zu sein, wenn ich auf den Index eines Artikels in einer Liste wie diesem verweisen muss ... und am Ende nur einen Counter wie ich verwende. :/
(auch, ich weiß, dass es mehr pythonic und effiziente Wege der Durchführung dieser Aufgabe sind, ich bin doch nur nicht sehr gut.)
'digcounter' behält einen genauen Index. 'list.index()' findet nur den Index der ** ersten ** Instanz. Wenn Sie also Ziffern haben, die mehr als einmal vorkommen, erhalten Sie den 'falschen' Index für das 2. oder höhere Vorkommen dieser Ziffer. Noch bessere Idee: benutze 'enumerate()', um dir den Index zu geben. –
Sieht so aus, als müsste ich herausfinden, was Enumerate tut. Vielen Dank! –