【问题标题】:Making sure length of matrix row is all the same (python3)确保矩阵行的长度相同(python3)
【发布时间】:2014-06-25 06:45:20
【问题描述】:

所以我有这个 python 3 代码来输入一个矩阵:

matrix = []
lop=True
while lop:
    line = input()
    if not line:
        lop=False
    if matrix != []:
        if len(line.split()) != len(matrix[-1]):
            print("Not same length")
            menu()
    values = line.split()
    row = [int(value) for value in values]
    matrix.append(row)

但是,如果我输入

1 2 3
4 5 6 7
8 9 0 1 2

我的代码会让它通过,但您会注意到第 2 行和第 3 行的长度与第 1 行不同;如何防止?该行必须与第 1 行长度相同,否则它必须返回一条错误消息,例如“行的长度不同。我不太确定该怎么做。也许:

for row in matrix:
    if len(row) == matrix[1]
        pass
    else:
       print('not same length')

但它不起作用。

谢谢

【问题讨论】:

  • 您的缩进已关闭。我将编辑您的问题,然后尝试该代码:)
  • 好的,我在等待 :) 谢谢
  • 好了,现在试试代码 :) 如果对你有帮助,你可以接受我的回答 :)

标签: python list matrix maxlength


【解决方案1】:
len(set(map(len,matrix))) == 1

解释:

map(len,matrix) 产生矩阵所有行的长度

set(...) 给出存在的所有唯一/不同长度的行。

  • 如果所有行的长度相同,这将是一个包含 1 个单个元素的集合。
  • 否则,它将有 2 个或更多。

最后,len(...) == 1 返回我们上面得到的是否包含 1 个单个元素,即所有行是否具有相同的长度。

【讨论】:

    【解决方案2】:

    如果你想匹配第一行的长度,试试这个方法,

    使用len(matrix[0])

    for row in matrix:
        if len(row) == len(matrix[0]):
            pass
        else:
           print('not same lenght')
    

    【讨论】:

    • 为什么使用max(matrix)?它没有找到最长的行,而且你也不需要最长的行。 max 需要对矩阵进行额外的迭代,这将使该操作变为 O(n^2) 而不是 O(n)。
    • 感谢@user2357112 指向我。是的,你是对的。我更新了我的答案。
    【解决方案3】:

    使用内置的len() 函数和break 语句。

    matrix = []
    lop =True
    while lop:
        line = input('Enter your line: ')
        if not line:
            lop=False
        if matrix != []:
            if len(line.split()) != len(matrix[-1]):
                print("Not same length")
                break
        values = line.split()
        row = [int(value) for value in values]
        matrix.append(row)
    

    运行如下:

    bash-3.2$ python3 matrix.py
    Enter your line: 1 2 3
    Enter your line: 4 5 6
    Enter your line: 7 8 9 0
    Not same length
    bash-3.2$ 
    

    【讨论】:

    • 我试过了,它不起作用,它返回 ' if len(line.split()) != len(matrice[-1].split()): AttributeError: 'list' object has没有属性“拆分”
    • 我也有同样的问题,但从文本文件中获取矩阵?这里:stackoverflow.com/questions/23532548/…
    • 其实我试过了,即使长度一样,总是说'Not same length'?谢谢
    • 你是如何尝试的?请告诉我你使用了什么输入法
    • 您的缩进已关闭。我将编辑您的问题,然后尝试该代码:)
    猜你喜欢
    • 2014-06-25
    • 2012-08-30
    • 1970-01-01
    • 2015-08-12
    • 1970-01-01
    • 2019-09-14
    • 2019-08-01
    • 2018-11-08
    • 2018-04-23
    相关资源
    最近更新 更多