Quando map
ha ingressi differente lunghezza, un valore di riempimento di None
viene utilizzata per gli ingressi mancanti:Perché la mappa funziona come izip_longest con fill = None?
>>> x = [[1,2,3,4],[5,6]]
>>> map(lambda *x:x, *x)
[(1, 5), (2, 6), (3, None), (4, None)]
Questo è lo stesso comportamento:
>>> import itertools
>>> list(itertools.izip_longest(*x))
[(1, 5), (2, 6), (3, None), (4, None)]
Qual è la ragione map
fornisce questo comportamento e non il seguente?
>>> map(lambda *x:x, *x)
[(1, 5), (2, 6), (3,), (4,)]
... e c'è un modo semplice per ottenere quest'ultimo comportamento sia con un certo sapore di zip
o map
?
E ' è ben [documentato] (https://docs.python.org/2.7/library/functions.html#map), ed è stato rimosso (o corretto) in Python 3 per renderlo equivalente a 'itertools.imap'. La ragione può essere da qualche parte nel vecchio codice sorgente CPYthon o nella mailing list. –
Considera: quale dovrebbe essere il risultato su '[[1,2,3,4], [5,6], [7,8,9,10]]' e sarebbe diverso dal risultato su '[[ 1,2,3,4], [5,6,7,8], [9,10]] '? – nneonneo
* Qual è la ragione per cui la mappa fornisce questo comportamento, e non il seguente? * Se una funzione richiede due argomenti posizionali richiesti, si otterrà un errore se ne passi uno solo. Quindi IMO, è più sensato che None sostituisca un argomento mancante. Inoltre controlla il commento di @Nneonneo. Il riempimento in Nessuno è l'unico modo per assicurare che gli elementi di uno e uno solo iterabile siano mappati su ciascun argomento posizionale. – Shashank