Python 列表重新排列

Python list rearranging

我目前正在尝试将一段代码从 Python2 移植到 Python3,此代码中的一个函数 returns 表示 table 的元组列表,但由于这些值是从多个 tkinter listboxes 中获取的,因此分两步进行:

  1. 依次从每个列表框中获取完整的列
  2. 将列表从每列一个元组反转为每行一个元组

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")]
>>> result = [("c1r1","c1r2","c1r3"),("c2r1","c2r2","c2r3"),("c3r1","c3r2","c3r3")]
>>> apply(map, [None] + result)
[('c1r1', 'c2r1', 'c3r1'), ('c1r2', 'c2r2', 'c3r2'), ('c1r3', 'c2r3', 'c3r3')]

使用第一个参数 None 调用 map,然后将 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))