如何获取列表列表并在python中重新排列它们

时间:2013-11-20 20:00:18

标签: 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)):
            new_list += [my_list[n][i]]
            print(new_list)
            n += 1
    return new_list

但是此代码返回[1, 4, 2, 5, 3, 6],而不是单个列表 像我想要的列表列表,我似乎无法弄清楚如何制作 函数根据列表中列表的索引输出列表列表。

3 个答案:

答案 0 :(得分:1)

像这样使用zip:

zip(list_a, list_b)

答案 1 :(得分:1)

您可以使用ziplist 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)]