Ich bekam eine Demo-Aufgabe in Codility zu tun, und ich habe einige Schwierigkeiten, herauszufinden, was ich falsch mache. Die Aufgabe:Equilibrium Index in Python 2.7
Arbeiten in Python 2.7 Environment
Ein Null-indiziertes Array A, bestehend aus N ganzen Zahlen angegeben. Ein Gleichgewichtsindex dieses Arrays ist eine beliebige ganze Zahl P, so dass 0 ≤ P < N und die Summe der Elemente niedrigerer Indizes gleich der Summe der Elemente höherer Indizes ist, dh
A [0] + A [1] + ... + A [P-1] = A [P + 1] + ... + A [N-2] + A [N-1].
Die Summe der Nullelemente wird als gleich 0 angenommen. Dies kann passieren, wenn P = 0 oder wenn P = N-1 ist.
Betrachten wir beispielsweise die folgende Matrix A bestehend aus N = 8 Elementen:
A[0] = -1
A[1] = 3
A[2] = -4
A[3] = 5
A[4] = 1
A[5] = -6
A[6] = 2
A[7] = 1
P = 1 ist, ein Gleichgewichtsindex dieser Anordnung, weil:
A[0] = −1 = A[2] + A[3] + A[4] + A[5] + A[6] + A[7]
p = 3 ist, ein Gleichgewichtsindex dieses Feldes, weil:
A[0] + A[1] + A[2] = −2 = A[4] + A[5] + A[6] + A[7]
P = 7 ist auch ein Gleichgewichtsindex, weil:
A[0] + A[1] + A[2] + A[3] + A[4] + A[5] + A[6] = 0
und es sind keine Elemente mit den Indizes größer als 7
P = 8 ist kein Gleichgewichtsindex, da es nicht die Bedingung 0 ≤ P < N.
Write a nicht erfüllt, Funktion:
def-Lösung (A)
dass bei einer Null-indiziertes Array A, bestehend aus N ganze Zahlen sind, einer ihrer Gleichgewichtsindizes zurückgibt. Die Funktion sollte -1 zurückgeben, wenn kein Gleichgewichtsindex existiert.
Als Antwort schrieb ich folgendes:
def solution(A):
if len(A) == 0: #If we're working with an empty list, the method should give us an empty list message and terminate there
return "Empty list, no integers to work with"
else:
equi = []
x = 0
length = len(A)
rightSum = []
leftSum = []
while x < length:
for i in A:
rightSum = A[1:i-1]
leftSum = A[i+1:length-2]
if sum(rightSum) == sum(leftSum):
equi.append(i)
return equi
else:
return -1
x += 1
pass
solution([-1,3,-4,5,1,-6,2,1])
Wenn ich den Code eingehalten, hielt ich -1 für die Testliste bekommen, obwohl ich immer equi werden sollte [1,3,7].
Eine andere Frage, warum brauche ich das Schlüsselwort "pass" am Ende der Methode?
Ich sollte hinzufügen, ich bin extrem neu in Python-Codierung und Codierung im Allgemeinen. Jede Hilfe, die Sie zur Verfügung stellen können, wäre willkommen.
Vielen Dank 9000, das war wirklich hilfreich Vorschlag über die Bonuspunkte. Ich habe nicht einmal daran gedacht, den Indexwert von der Gesamtsumme abzuziehen. Wie viel von einem Unterschied wird linear oder quadratisch im Vergleich zu Leistung, Overhead usw. sparen? Ich bin noch nicht dort angekommen, aber ich würde mir vorstellen, dass eine Verbesserung der Leistung und/oder ein geringerer Overhead willkommen wäre. – Ram