Python 列表重新排列
Python list rearranging
我目前正在尝试将一段代码从 Python2
移植到 Python3
,此代码中的一个函数 returns 表示 table 的元组列表,但由于这些值是从多个 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")]
>>> 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))
。
我目前正在尝试将一段代码从 Python2
移植到 Python3
,此代码中的一个函数 returns 表示 table 的元组列表,但由于这些值是从多个 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")]
>>> 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))
。