@yras8: Przeczytawszy dokumentację i chwilę eksperymentując z sum można wydedukować jak działa.
sum(iterable, /, start=0)
Sums start and the items of an iterable from left to right and returns the total. The iterable’s items are normally numbers, and the start value is not allowed to be a string.
Zatem drugi argument jest wartością początkową do której dodawane są kolejne elementy iterowalnego obiektu.
@yras8: nie wiem co to za książka, ale weź ją lepiej spal i się z dokumentacji ucz. Sum dopuszcza użycie drugiego parametru, start, i tylko dzięki temu ten kod działa. Ale do łączenia list powinno się używać itertools.chain.
Jakbym coś takiego w kodzie zobaczył to moją pierwszą reakcją byłoby "wtf".
Druga sprawa - python pozwala na łączenie list porzez ich.. "dodawanie" znakiem plusa - to tworzy nową listę, która zawiera wszystkie elementy, które zostały "dodane". Dzięki temu sum() połączył wszystkie listy z argumentów. Trzeci argument był pustą listą, zatem jest pomijany.
@FantaZy: Warto tutaj dodać, że za takie zachowanie listy odpowiedzialna jest implementacja __add__ i __iadd__. Dodając dwie listy do siebie, tak naprawdę python wykonuje:
list_a.extend(list_b) co się sprowadza do:
list_a[len(list_a):] = list_b.
Przy czym __iadd__ wywoływanie jest przy in place assignment, czyli list_a +=list_b.
Ja to się zastanawiam, czy to się kiedyś skończy, promowanie par mieszanych na siłę i wszędzie. Trend od kilku lat narasta. Losowa reklama? Biała i nie biały.
Ktoś mi wytłumaczy jak działa sum dla tego drugiego przypadku? Bo nie rozumiem outputu
Komentarz usunięty przez autora
Przeczytawszy dokumentację i chwilę eksperymentując z
sum
można wydedukować jak działa.Zatem drugi argument jest wartością początkową do której dodawane są kolejne elementy iterowalnego obiektu.
Mówiąć prosto
sum
robi coś takiego:start = []
Sum
dopuszcza użycie drugiego parametru,start
, i tylko dzięki temu ten kod działa. Ale do łączenia list powinno się używaćitertools.chain
.Jakbym coś takiego w kodzie zobaczył to moją pierwszą reakcją byłoby "wtf".
sum()
sumuje argumenty polecenia. Mamy tutaj 3 argumenty:1:
[1, 2]
2:
[3, 4]
3:
[]
(pusta lista)Druga sprawa - python pozwala na łączenie list porzez ich.. "dodawanie" znakiem plusa - to tworzy nową listę, która zawiera wszystkie elementy, które zostały "dodane". Dzięki temu
sum()
połączył wszystkie listy z argumentów. Trzeci argument był pustą listą, zatem jest pomijany.Gdybyś spróbował wywołać
sum([[1, 2], [3, 4]])
dostałbyś błąd
TypeError
bosum
próbowałby wykonać:start=0
start+=[1, 2] # Nie wolno dodawać inta z listą
__add__
i__iadd__
. Dodając dwie listy do siebie, tak naprawdę python wykonuje:list_a.extend(list_b)
co się sprowadza do:
list_a[len(list_a):] = list_b
.Przy czym
__iadd__
wywoływanie jest przy in place assignment, czylilist_a +=list_b
.