确保矩阵每行长度一致 (python3)

0 投票
3 回答
2571 浏览
提问于 2025-04-18 05:46

我有一段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

我的代码会让它通过,但你会注意到第二行和第三行的长度和第一行不一样;我该怎么防止这种情况呢?每一行的长度必须和第一行相同,否则就应该返回一个错误信息,比如“行的长度不一致”。我不太确定怎么做到这一点。也许:

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

但是这样不行。

谢谢

3 个回答

0
len(set(map(len,matrix))) == 1

解释:

map(len,matrix) 这个操作会计算出矩阵中每一行的长度。

set(...) 则会把这些长度中不同的值提取出来,也就是说只保留独一无二的长度。

  • 如果所有行的长度都一样,那么这个集合里就只有一个元素。
  • 如果行的长度不一样,集合里就会有两个或更多的元素。

最后,len(...) == 1 这个判断会告诉我们上面得到的集合里是否只有一个元素,也就是所有行的长度是否相同。

0

使用内置的 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$ 
0

如果你想要获取第一行的长度,可以试试这个方法:

使用 len(matrix[0])

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

撰写回答