Python 3与Python 2映射行为
发布时间:2020-12-16 23:44:21 所属栏目:Python 来源:网络整理
导读:在 Python 2中,常用的(旧的,遗留的)习惯是使用映射来使用形式映射(None,iter,…)来连接不均匀长度的迭代器,如: map(None,xrange(5),xrange(10,12))[(0,10),(1,11),(2,None),(3,(4,None)] 在Python 2中,它被扩展,使得最长的迭代器是返回的列表的长度,如果一
在
Python 2中,常用的(旧的,遗留的)习惯是使用映射来使用形式映射(None,iter,…)来连接不均匀长度的迭代器,如:
>>> 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 做你想要的,有一个更易理解的名字. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |