检查嵌套列表是否具有特定索引的值的优雅方法是什么?

时间:2017-10-20 22:43:30

标签: python list exception-handling nested-lists

假设我们有2d数组:

ar = [[1,2],
      [3,4]]

if ar[1][1]:
#works
if not ar[3][4]: 
#breaks!! 

因为我是python的新手,需要知道优雅的语法是什么。

2 个答案:

答案 0 :(得分:7)

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")

答案 1 :(得分:0)

如果这是您需要经常进行的检查,您可以使自己成为一个小帮手功能,以便您的主要代码更好地流动:

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