在 IronPython 2.7 和 Python3.5 中压缩
zip in IronPython 2.7 and Python3.5
我有一个脚本想在 Python3.5 和 IronPython2.7 中执行。
脚本最初是为 Python3 编写的,所以我有一些类似于下面代码的嵌套循环:
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
现在,如果我 运行 在 IronPython2.7 中这样做,我不会得到相同的结果,因为 zip returns 是一个列表而不是迭代器。
为了规避这个问题,我想我会这样做:
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
有没有更好的方法来做到这一点?
我觉得这很合理。一个小的修改将允许您通过执行
来避免显式版本号检查
try:
from itertools import izip as zip_
except ImportError:
# Python 3
zip_ = zip
您可以使用 builtins
from the future 库。
from builtins import zip
在 python2 你得到一个 itertools.izip
而在 python3 你只是得到 zip。
In [1]: from builtins import zip
In [2]: zip([1,2,3,4])
Out[2]: <itertools.izip at 0x7fa16c8496c8>
In [1]: from builtins import zip
In [2]: zip([1,2,3,4])
Out[2]: <zip at 0x7f13dfb9c188>
Python3.5 个用户,
A=[1,2,3,4,5,6,7]
B=[7,6,5,4,32,1]
In: c=list(zip(A,B))
In: print(c)
out: [(1,7),(2,6),(3,5),(4,4),(5,3),(6,2),(7,1)]
我有一个脚本想在 Python3.5 和 IronPython2.7 中执行。
脚本最初是为 Python3 编写的,所以我有一些类似于下面代码的嵌套循环:
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
现在,如果我 运行 在 IronPython2.7 中这样做,我不会得到相同的结果,因为 zip returns 是一个列表而不是迭代器。
为了规避这个问题,我想我会这样做:
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
有没有更好的方法来做到这一点?
我觉得这很合理。一个小的修改将允许您通过执行
来避免显式版本号检查try:
from itertools import izip as zip_
except ImportError:
# Python 3
zip_ = zip
您可以使用 builtins
from the future 库。
from builtins import zip
在 python2 你得到一个 itertools.izip
而在 python3 你只是得到 zip。
In [1]: from builtins import zip
In [2]: zip([1,2,3,4])
Out[2]: <itertools.izip at 0x7fa16c8496c8>
In [1]: from builtins import zip
In [2]: zip([1,2,3,4])
Out[2]: <zip at 0x7f13dfb9c188>
Python3.5 个用户,
A=[1,2,3,4,5,6,7]
B=[7,6,5,4,32,1]
In: c=list(zip(A,B))
In: print(c)
out: [(1,7),(2,6),(3,5),(4,4),(5,3),(6,2),(7,1)]