Kiedy map
posiada wejścia różnej długości, wartość napełnienia None
służy do brakujących wejść:Dlaczego mapa działa jak izip_longest z wypełnieniem = Brak?
>>> x = [[1,2,3,4],[5,6]]
>>> map(lambda *x:x, *x)
[(1, 5), (2, 6), (3, None), (4, None)]
To samo zachowanie jak:
>>> import itertools
>>> list(itertools.izip_longest(*x))
[(1, 5), (2, 6), (3, None), (4, None)]
Co jest powodem map
zapewnia to zachowanie , a nie następujące?
>>> map(lambda *x:x, *x)
[(1, 5), (2, 6), (3,), (4,)]
... i tam jest łatwym sposobem na uzyskanie tego ostatniego zachowania albo z jakiegoś smaku zip
lub map
?
To jest dobrze [udokumentowane] (https://docs.python.org/2.7/library/functions.html#map) i został usunięty (lub powiedziany poprawiony) w Pythonie 3, aby uczynić go odpowiednikiem 'itertools.imap'. Przyczyna może znajdować się gdzieś w starym kodzie źródłowym lub liście adresowej CPython. –
Rozważ: jaki powinien być wynik na [[1,2,3,4], [5,6], [7, 8, 9, 10]] "i czy będzie on różnił się od wyniku na' [[ 1,2,3,4], [5,6,7,8], [9,10]] "? – nneonneo
* Z jakiego powodu mapa zapewnia takie zachowanie, a nie następujące? * Jeśli funkcja przyjmuje dwa wymagane argumenty pozycyjne, otrzymasz błąd, jeśli przekażesz tylko jeden. Tak więc, IMO, ma sens, aby Nic nie zastąpiło brakującego argumentu. Dodatkowo sprawdź komentarz @ nneonneo. Wypełnienie Brak jest jedynym sposobem, aby upewnić się, że elementy jednej i tylko jednej pozycji iteracyjnej są odwzorowane na każdy argument pozycyjny. – Shashank