如何获取列表列表并在python中重新排列它们
我正在尝试创建一个函数来实现这一点如何获取列表列表并在python中重新排列它们,python,list,Python,List,我正在尝试创建一个函数来实现这一点 >>> rearrange_list([1,2,3],[4,5,6]) [[1,4],[2,5],[3,6]] 到目前为止,我得到的是 def rearrange_list(my_list): i = 0 n = 0 new_list = [] for i in range(0, len(my_list[n])): for n in range(0,len(my_list)):
>>> rearrange_list([1,2,3],[4,5,6])
[[1,4],[2,5],[3,6]]
到目前为止,我得到的是
def rearrange_list(my_list):
i = 0
n = 0
new_list = []
for i in range(0, len(my_list[n])):
for n in range(0,len(my_list)):
new_list += [my_list[n][i]]
print(new_list)
n += 1
return new_list
但此代码返回的是一个列表,而不是
像我希望的那样的列表,我似乎不知道如何制作
函数根据列表中列表的索引输出列表。使用zip()
:
>>> zip([1,2,3], [4,5,6])
[(1, 4), (2, 5), (3, 6)]
或者,对于特定的varargs版本:
>>> lsts = ([1,2,3], [4,5,6])
>>> zip(*lsts)
[(1, 4), (2, 5), (3, 6)]
或者,如果元组不起作用,则将结果映射到列表:
map(list, zip([1,2,3], [4,5,6])) # Python 2
[list(t) for t in zip([1,2,3], [4,5,6])] # Python 2 and 3
作为您功能的替代:
def rearrange_list(*my_lists):
return [list(t) for t in zip(*my_lists)]
像这样使用拉链:
zip(list_a, list_b)
您可以使用和:
请注意,上述函数仅处理两个列表。如果要处理任意数量的列表,可以使用以下方法:
>>> def rearrange_lists(*lsts):
... return [list(x) for x in zip(*lsts)]
...
>>> rearrange_lists([1,2,3], [4,5,6], [7,8,9])
[[1, 4, 7], [2, 5, 8], [3, 6, 9]]
>>>
zip
应该做你想做的事。虽然它给你一个元组列表,但不是列表。有没有办法把元组变成一个列表?我特别需要它成为一个列表。@agconti-比什么更有效率?如果你是指OP的当前代码,那么是的,它的效率要高得多。内置函数的运行速度比定制函数快得多(好吧,我会说99%的时间,以防有我不知道的异常示例;)。另外,我的解决方案使用了列表理解,这几乎总是比for循环更快。我似乎在最后一点上遇到了一些问题。为什么没有输出?@biogeek:因为你没有打印任何东西eval.in
不是Python交互式解释器,没有响应。添加一个print()。它的读法不应该像list2=['AAAA'、'dddddd'、'GGGG'、'jjjjj']、['BBBB'、'EEEE'、'hhh'、'KKKK']、['CCCC'、'FFFF'、'IIII'、'LLLL']
>>> def rearrange_lists(*lsts):
... return [list(x) for x in zip(*lsts)]
...
>>> rearrange_lists([1,2,3], [4,5,6], [7,8,9])
[[1, 4, 7], [2, 5, 8], [3, 6, 9]]
>>>