Zachowanie mapy Python 3 vs Python 2

W Pythonie 2 używa się wspólnego (starego, starszego) idiomumap do łączenia iteratorów o nierównej długości za pomocą formularzamap(None,iter,iter,...) w ten sposób:

>>> map(None,xrange(5),xrange(10,12))
[(0, 10), (1, 11), (2, None), (3, None), (4, None)]

W Pythonie 2 jest rozszerzony tak, żenajdłuższy iterator to długość zwróconej listy, a jeśli jest krótsza niż druga, to jest wypełnianaNone.

W Pythonie 3 jest inaczej. Po pierwsze, nie możesz użyćNone jako argument na żądanie w pozycji 1:

>>> list(map(None, range(5),range(10,12)))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'NoneType' object is not callable

OK - mogę to naprawić tak:

>>> def f(*x): return x    
... 
>>> list(map(f, *(range(5),range(10,12))))
[(0, 10), (1, 11)]

Ale teraz mam inny problem:map zwracanajkrótszy długość iteratora - nie jest już wypełnionaNone.

Ponieważ I portuje kod Pythona 2 do Pythona 3, nie jest to straszny rzadki idiom i nie znalazłem łatwego rozwiązania.

Niestety, narzędzia 2to3nie podnieś to - bezskutecznie sugerując:

-map(None,xrange(5),xrange(10,18))
+list(map(None,list(range(5)),list(range(10,18)))) 

Propozycje?

Edytować

Dyskutuje się o tym, jak powszechny jest ten idiom.Zobacz ten post SO.

Aktualizuję napisany wcześniej kodkiedy byłem jeszcze w liceum. Spójrz na samouczki Pythona z 2003 rokunapisane i omówione Raymond Hettinger z tym szczególnym zachowaniem mapy wskazywanym ...

questionAnswers(3)

yourAnswerToTheQuestion