【发布时间】:2018-04-02 04:00:15
【问题描述】:
假设我们有二维数组:
ar = [[1,2],
[3,4]]
if ar[1][1]:
#works
if not ar[3][4]:
#breaks!!
由于我是 python 新手,需要知道什么是优雅的语法。
【问题讨论】:
标签: python list exception-handling nested-lists
假设我们有二维数组:
ar = [[1,2],
[3,4]]
if ar[1][1]:
#works
if not ar[3][4]:
#breaks!!
由于我是 python 新手,需要知道什么是优雅的语法。
【问题讨论】:
标签: python list exception-handling nested-lists
如果这是你需要经常做的检查,你可以给自己做一个小辅助函数,这样你的主要代码会更好地流动:
def has_item_at(items, i, j):
return i < len(items) and j < len(items[i])
def main():
items = [[1, 2], [3, 4]]
if has_item_at(items, 1, 1):
# do stuff
if has_item_at(items, 3, 4):
# don't do stuff
如果您需要检查是否存在并检索该项目,您可以执行以下操作:
def get_item(items, i, j, default=None):
if i < len(items) and j < len(items[i]):
return items[i][j]
return default
def main():
items = [[1, 2], [3, 4]]
item = get_item(items, 1, 1)
if item is not None:
# do stuff
【讨论】:
Python 深受喜爱的带有异常处理的 EAFP 方法将是我的做法。
try:
print(ar[i][j]) # i -> row index, j -> col index
except IndexError:
print('Error!')
另一种方法,也称为 LYBL 方法,是使用if 检查:
if i < len(ar) and j < len(ar[i]):
print(ar[i][j])
这是“单线”版本(这会降低可读性,但您似乎想要):
print(ar[i][j] if i < len(ar) and j < len(ar[i]) else "Error")
【讨论】:
print(ar[i][j] if i < len(ar) and j < len(ar[i]) else "Error") 我不推荐它,它会破坏可读性。
if not ar[3][4]: 能优雅地工作。谢谢你们。