搜尋巢狀序列

在巢狀序列中搜尋如 listlist 需要一種方法,例如在 dict 中搜尋鍵的值,但需要自定義函式。

如果在序列中找到值,則為最外層序列的索引:

def outer_index(nested_sequence, value):
    return next(index for index, inner in enumerate(nested_sequence) 
                      for item in inner 
                      if item == value)

alist_of_tuples = [(4, 5, 6), (3, 1, 'a'), (7, 0, 4.3)]
outer_index(alist_of_tuples, 'a')  # 1
outer_index(alist_of_tuples, 4.3)  # 2

或外部序列和內部序列的索引:

def outer_inner_index(nested_sequence, value):
    return next((oindex, iindex) for oindex, inner in enumerate(nested_sequence) 
                                 for iindex, item in enumerate(inner) 
                                 if item == value)

outer_inner_index(alist_of_tuples, 'a') # (1, 2)
alist_of_tuples[1][2]  # 'a'

outer_inner_index(alist_of_tuples, 7)   # (2, 0)
alist_of_tuples[2][0]  # 7

通常( 並非總是 )使用 next 和具有條件的生成器表示式來查詢搜尋值的第一次出現是最有效的方法。