首页 > 解决方案 > 将大小不等的 2D 列表的行与 try catch 进行比较会导致程序不规则地跳转

问题描述

我有一个名为 Matrix 的二维列表。每列可以有不相等的行数。我需要比较行。如果列不存在行,那么我的 try catch 会跳过它并将该行设置为的变量保留为空字符串。

问题是当索引不存在时,代码会跳转到不同的异常块。例如,如果 z 超出范围,则代码可能会在 y 之后立即跳转到异常规则并再次执行 z。有时,这个循环以 K 值(如 5)退出,而它永远不应超过 3。

我怎样才能阻止代码像这样跳来跳去,并在尝试后立即进入异常规则。有没有更好的方法来比较 2D 列表的行与不同数量的行,而不会出现不稳定的 try catch 行为?

while(k < 3):
 x = ""
 y = ""
 z = ""
 k = 0
 try:
     x = Matrix[0][i]
 except IndexError:
     k = k + 1

 try:
     y = Matrix[1][i]
 except IndexError:
     k = k + 1

 try:
     z = Matrix[2][i]
 except IndexError:
     k = k + 1

 if k == 3:  #Prevents submitting x,y,z if they are all empty strings
     break
 i = i + 1
 results = compare(x,y,z)

标签: python

解决方案


看来您可以使用该itertools模块来实现您的目标:

>>> Matrix = [["a","b","c"],["d"], ["e", "f"]]
>>> from itertools import zip_longest
>>> for item in zip_longest(*Matrix, fillvalue=""):
...     print(item)
...
('a', 'd', 'e')
('b', '', 'f')
('c', '', '')

推荐阅读