2017-02-08 2 views
0

Um einen Akku zu verbessern, schreibe ich eine Funktion zu testen, ob ich einen Akku richtig verwende, aber ich bleibe stecken, wenn ich versuchte, es zu schreiben, auch wenn ich denke, der Rest meiner Funktion ist gut Code es.Wie man einen Akku verbessert

Jede mögliche Informationen nützlich sein, wenn Sie etwas Fremdes Vielen Dank im Voraus

def gather_every_nth(L, n): 
    '''(list, int) -> list 

    Return a new list containing every n'th element in L, starting at index 0. 

    Precondition: n >= 1 

    >>> gather_every_nth([0, 1, 2, 3, 4, 5], 3) 

    [0, 3] 
    >>> gather_every_nth(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i'], 2) 
    ['a', 'c', 'e', 'g', 'i'] 
    ''' 

    result = [] 
    i = 0 
    while i < len(L): 
     result.append(L[i]) 
     i = result + result.append(L[i]) # I am not sure about this... 

    return result 
+0

Aber h Denn 'n 'ist ** nicht ** ein Akkumulator. Ein Akkumulator ist ein in der Rekursion passierter Parameter zum Speichern des * Zustands * der Rekursion. –

Antwort

1

Ich verstehe nicht wirklich, warum Sie denken, es eine hier Akkumulator ist: das einzige, was wie ein Akkumulator aussieht ist result. Aber gewöhnlich wird der Begriff Akkumulator im Kontext der Rekursion verwendet.

Diese Zeile:

i = result + result.append(L[i]) 

ist eindeutig problematisch: i soll ein Index sein so ein int. Und hier fügen Sie None (das Ergebnis einer beliebigen Operation .append) zu einer Liste hinzu (?!) Und was erwarten Sie, dass das Ergebnis sein wird?

Ein Weg, dies zu beheben, ist einfach:

i = i + n 

oder noch kürzer:

i += n 

Trotzdem können Sie Ihren gesamten Code zu einem Einzeiler mit Liste Verständnis reduzieren :

def gather_every_nth(L, n): 
    return [L[i] for i in range(0,len(L),n)] 
+0

Ich versuchte, indem ich i = i + n hinzufügte, aber es scheint, dass nicht Arbeit ist, weil jyst das erste Element von L [] zurückbringt. Ich verstehe, was ich tun muss, kann aber nicht einfach den Code auf diese Weise schreiben. So frustrierend. Entschuldigung für meine verwirrten Konzepte eines Akkumulators. Ich werde es weiter versuchen, also wird jede Hilfe nützlich sein. Vielen Dank im Voraus – user7491985

+0

@ user7491985: nachdem ich Ihre Frage erneut gelesen habe, denke ich, dass die Einrückung nach der "while" -Schleife auch falsch ist. –

+0

Sie brauchen nicht einmal ein Listenverständnis; Diese Funktion ist so spezifiziert, dass sie nur Listen annimmt, also können Sie einfach 'return L [:: n]' zurückgeben. – user2357112

Verwandte Themen