>>> map(None,xrange(5),xrange(10,12))[(0,10),(1,11),(2,None),(3,(4,None)]
在Python 2中,它被扩展,使得最长的迭代器是返回的列表的长度,如果一个比另一个更短,则填充None.
在Python 3中,这是不同的.首先,您不能使用None作为第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
好的 – 我可以这样修复:
>>> def f(*x): return x ... >>> List(map(f,*(range(5),12))))[(0,11)]
但现在我有一个不同的问题:map返回最短的迭代器的长度 – 不再填充None.
当我将Python 2代码转换为Python 3时,这不是一个可怕的罕见成语,我还没有想出一个简单的在位解决方案.
不幸的是,2to3工具does not挑选了这个 – 没有帮助的建议:
-map(None,18))+List(map(None,List(range(5)),List(range(10,18))))
建议?
编辑
有一些关于这个成语是多么普遍的讨论. See this SO post.
我正在更新当我还在高中时写的遗留代码.看看Raymond Hettinger的2003年Python教程是written and discussed,具体地图的具体行为被指出…
解决方法itertools.zip_longest
做你想要的,有一个更易理解的名字. 总结 以上是内存溢出为你收集整理的Python 3与Python 2映射行为全部内容,希望文章能够帮你解决Python 3与Python 2映射行为所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)