确保矩阵每行长度一致 (python3)
我有一段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')