我目前正在尝试将代码的一部分从Python2
移植到Python3
,此代码中的一个函数返回表示表的元组列表,但是这些值是从多个tkinter
listboxes
这有两个步骤:
在Python2
中执行此操作的行是:
apply(map, [None] + result)
我还没知道这实际上是如何工作的,或者如何移植它,我已经浏览了文档和我可以看到的关于如何移植到Python3
申请或地图的一切并没有实现我想要的目标。
我正在使用Python 3.3
,因为列数不固定,所以首选灵活的答案。
作为一个例子:
[("c1r1","c1r2","c1r3"),("c2r1","c2r2","c2r3"),("c3r1","c3r2","c3r3")]
需要转到:
[("c1r1","c2r1","c3r1"),("c1r2","c2r2","c3r2"),("c1r3","c2r3","c3r3")]
答案 0 :(得分:5)
>>> result = [("c1r1","c1r2","c1r3"),("c2r1","c2r2","c2r3"),("c3r1","c3r2","c3r3")]
>>> apply(map, [None] + result)
[('c1r1', 'c2r1', 'c3r1'), ('c1r2', 'c2r2', 'c3r2'), ('c1r3', 'c2r3', 'c3r3')]
使用第一个参数map
调用None
,然后使用3个元组作为其余参数。相当于:
>>> map(None, *result)
[('c1r1', 'c2r1', 'c3r1'), ('c1r2', 'c2r2', 'c3r2'), ('c1r3', 'c2r3', 'c3r3')]
但是对于此操作,您应该使用交叉兼容的zip(*result)
>>> zip(*result)
[('c1r1', 'c2r1', 'c3r1'), ('c1r2', 'c2r2', 'c3r2'), ('c1r3', 'c2r3', 'c3r3')]
在Python 3上,如果需要列表,可能需要使用list(zip(*result))
。