【问题标题】:How to get columns out of any length of list?如何从任何长度的列表中获取列?
【发布时间】:2023-04-06 23:56:01
【问题描述】:

以前可能有人问过这个问题,但我找不到我需要的答案。我有兴趣从列表的任何长度中获取列。我只知道如何在一定长度内做到这一点。

我必须检查两个矩阵,如果其中一个是另一个的转置。因为它们的长度可能不同,所以对我来说并不容易。

matrix_1 = [[1, 2], [3, 4], [5, 6]]
matrix_2 = [[1, 3, 5], [2, 4, 6]]

这应该返回 True。

【问题讨论】:

  • 你试过什么代码?

标签: python arrays python-3.x list matrix


【解决方案1】:

既然你提到了矩阵,你应该使用 3rd 方库numpy

import numpy as np

matrix_1 = np.array([[1, 2], [3, 4], [5, 6]])

matrix_2 = np.array([[1, 3, 5], [2, 4, 6]])

res = np.array_equal(matrix_1, matrix_2.T)  # True
res = (matrix_1 == matrix_2.T).all()        # True

【讨论】:

  • 可能是最有效的解决方案,因为numpy 是本机代码(无 python 循环)
  • @Jean-FrançoisFabre,是的——这让我想起了当前关于元的对话——在提到“矩阵”这个词的那一刻,我认为你应该转向图书馆。你的同样适用于一次性的一般任务。
  • 我没有关注那些元对话,忙于阅读 Hans cmets :) 对于密集的矩阵微积分,numpy 是必须使用的。对于休闲的东西,坚持基本的python。
【解决方案2】:

纯python答案:zip转置(经典),然后转换为list(因为zip产生tuples,所以比较总是会失败),然后比较:

matrix_1 = [[1, 2], [3, 4], [5, 6]]
matrix_2 = [[1, 3, 5], [2, 4, 6]]

matrix_1 == [list(x) for x in zip(*matrix_2)]

【讨论】:

    【解决方案3】:

    感谢您的回答,但我自己设法解决了我的问题。很抱歉浪费您的时间。解决方案非常简单,但我只是太努力地解决这个问题。无论如何,如果有人感兴趣:

    def is_transpose(matrix_1, matrix_2):
    
        for i in range(len(matrix_1)):
            for j in range(len(matrix_1[i])):
                if matrix_1[i][j] != matrix_2[j][i]:
                    return False
        return True
    

    【讨论】:

      猜你喜欢
      • 2013-12-07
      • 1970-01-01
      • 1970-01-01
      • 2014-03-16
      • 2022-11-14
      • 2019-02-02
      • 1970-01-01
      • 2021-06-18
      • 2021-02-23
      相关资源
      最近更新 更多