python - 将大小不等的 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)
解决方案
看来您可以使用该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', '', '')
推荐阅读
- kotlin - 创建一个包含字符串的单行函数有什么好处,而仅通过将字符串分配给变量是无法实现的?
- c# - 有没有办法提示 C# 如何执行泛型类型推断?
- javascript - 在 JavaScript 中删除(原始)字符串的第一个字符
- ruby-on-rails - 价值问题由于某种原因而改变
- python - 如何在加载图像时制作流畅的动画而不冻结窗口?
- visual-studio - 为什么我的 Visual Studio 2019 Pro 在进行 Visual Installer 更新后调试如此缓慢?
- python - 在函数内运行多处理不起作用
- java - Spring类路径资源被覆盖
- c# - 如何使用 C# 从控制器反转 JSON.Stringify
- postgresql - Rails 和 Postgresql 中的每周小时分配问题