【问题标题】:Join "colums" of list of lists into "rows" of list of lists将列表列表的“列”加入列表列表的“行”
【发布时间】:2017-02-07 21:13:46
【问题描述】:

假设我有几个长度为 n 的列表:

a = [1, 2, 3]
b = [4, 5, 6]
c = [7, 8, 9]
d = [-1, -2, -3]

我将这些列表放入一个列表中:

x = [a, b, c]

现在我想得到以下列表:

y = [[1, 4, 7, -1], [2, 5, 8, -2], [3, 6, 9, -3]]

什么是快速和 Pythonic 的方式来做到这一点? (从xy。)

条目可以是任何东西,我使用数字只是因为它们具有良好的视觉效果。

【问题讨论】:

    标签: python


    【解决方案1】:

    有一种非常简单的 Pythonic 方法可以以这种方式“反向压缩”列表。简单使用zip函数和解包操作符*

    >>> y = zip(*x)
    >>> list(y)
    [(1, 4, 7, -1), (2, 5, 8, -2), (3, 6, 9, -3)]
    

    有关正在发生的事情的更多信息,请参阅What is the inverse function of zip in python?

    如果重要的是列表列表而不是元组列表,您可以执行以下操作:

    >>> [list(i) for i in zip(*x)]
    [[1, 4, 7, -1], [2, 5, 8, -2], [3, 6, 9, -3]]
    

    【讨论】:

    • OP 不想要一个列表列表而不是一个元组列表吗?
    • 在大多数用例中,我认为这并不重要,但我也为此添加了一个代码 sn-p。
    【解决方案2】:

    你可以试试zip

    >>> result = zip(a,b,c,d) # This gives ans as list of tuples [(1, 4, 7, -1), (2, 5, 8, -2), (3, 6, 9, -3)]
    >>> result_list = [list(elem) for elem in result] #convert list of tuples to list of list
    >>> result_list
    [[1, 4, 7, -1], [2, 5, 8, -2], [3, 6, 9, -3]]
    

    【讨论】:

      【解决方案3】:

      一行代码就可以搞定:

      [[z[i] for z in x] for i in range(len(x[0]))]
      

      它的作用是遍历所有索引 (i),然后遍历 x (z) 中的所有列表并创建一个新列表。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-15
        • 2021-06-17
        • 1970-01-01
        • 2013-12-31
        相关资源
        最近更新 更多