Ho uno script che voglio eseguire sia in Python3.5 che in IronPython2.7.zip in IronPython 2.7 e Python3.5
Lo script è originariamente scritto con python3 in mente, in modo da avere alcuni cicli annidati simili al codice qui sotto:
myIter0 = iter(['foo','foo','bar','foo','spam','spam'])
myIter1 = iter(['foo','bar','spam','foo','spam','bar'])
myIter2 = iter([1,2,3,4,5,6])
for a in myIter0:
for b, c in zip(myIter1, myIter2):
if a + b == 'foobar':
print(c)
break
Ora, se corro questo IronPython2.7 io non ottenere lo stesso risultato perché zip restituisce un elenco e non un iteratore.
per aggirare questo problema, ho pensato di fare:
import sys
if sys.version_info.major == 2:
from itertools import izip as _zip
else:
_zip = zip
myIter0 = iter(['foo','foo','bar','foo','spam','spam'])
myIter1 = iter(['foo','bar','spam','foo','spam','bar'])
myIter2 = iter([1,2,3,4,5,6])
for a in myIter0:
for b, c in _zip(myIter1, myIter2):
if a + b == 'foobar':
print(c)
break
Esiste un modo migliore per fare questo?
Forse sto ancora troppo sonno, ma qual è il problema con 'zip' restituendo una lista in python2? O è specifico per IronPython? –
Il problema è che 'zip (myIter1, myIter2)' usa tutti gli elementi in 'myIter1' e' myIter2' in Python2. Il programma non rientra nel ciclo 'for' nidificato poiché' zip (myIter1, myIter2) 'è un iteratore vuoto dopo la prima iterazione del ciclo principale. –
Cosa dire di ['six.zip()'] (https://pythonhosted.org/six/)? – pzp