W poniższym kodzie:Python sprawność lista krojenie
def listSum(alist):
"""Get sum of numbers in a list recursively."""
sum = 0
if len(alist) == 1:
return alist[0]
else:
return alist[0] + listSum(alist[1:])
return sum
jest nową listę utworzoną za każdym razem, kiedy robię listSum(alist[1:])
?
Jeśli tak, czy jest to zalecany sposób, czy mogę zrobić coś bardziej wydajnego? (Nie dla specyficzna funkcja -To służy jako Przykładzie, lecz gdy chcę przetworzyć konkretną część listy w ogóle.)
Edit:
Przepraszam, jeśli kogoś mylić, nie jestem zainteresowani wydajną implementacją sum
, posłużyło to jako przykład do zastosowania takiego cięcia.
Zakładając jako przykład zabawkę, że mam dość dużą listę liczb, a ja chcę dodać 2 do połowy z nich. Czy coś takiego jak 'for number in mylist [middle:]: number + = 2' jest dopuszczalne? (Czy nie uważa się za dobrą praktykę wycinanie naprawdę dużej listy?) –
@i_am_finally_learning_python Pomijanie tego przykładu nie działa - nie zmienia zawartości 'mylist' (i najprostszy sposób na zrobienie tego wymaga nic nie kroi) - to zależy. Krojenie ma duży plus, że jest zwykle prostsze i ładniejsze niż alternatywa. Ale w zależności od tego, co "dość duże", jak często ten kod wykonuje, i inne czynniki, może być denerwująco powolny, a mniej czytelna alternatywa bez plasterka jest tego warta. Trudno powiedzieć ogólnie. – delnan
Och, oczywiście, myślę, że byłem podekscytowany tym pytonem dla pętli !! To oczyściło trochę rzeczy, dzięki. –