我正在尝试创建一个可以执行此操作的函数。
>>> 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
但是此代码返回[1, 4, 2, 5, 3, 6]
,而不是单个列表
像我想要的列表列表,我似乎无法弄清楚如何制作
函数根据列表中列表的索引输出列表列表。
答案 0 :(得分:1)
像这样使用zip:
zip(list_a, list_b)
答案 1 :(得分:1)
您可以使用zip
和list comprehension:
>>> def rearrange_lists(a, b):
... return [list(x) for x in zip(a, b)]
...
>>> rearrange_lists([1,2,3], [4,5,6])
[[1, 4], [2, 5], [3, 6]]
>>>
请注意,上述功能仅处理两个列表。如果要处理任意数量的列表,可以使用:
>>> 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]]
>>>
答案 2 :(得分:0)
改为使用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)]