2016-12-07 30 views
0

我有一個元組列表,看起來像下面如何查找列表(在列表中)的第一個實例的索引,包含想要的值(使用Python)?

list_of_list = [(0,1,2), (0,1), (0,1,3,4), (0,1,2,3,4)] 

我想找到的第一次我有一個特別的整數索引。例如,我想查找第一次存在3,並希望它返回索引2.如果找不到任何內容,我也希望它返回None。我目前有以下代碼

def find_index_of_solution(list_of_list, value_I_am_searching_for): 
    for idx, list_item in enumerate(list_of_list): 
    if value_I_am_searching_for in list_item: 
     return idx 
    return None 

有沒有更好的方法來做到這一點?謝謝!

+2

就我個人而言,我會發現你的解決方案是最易讀和易於理解的。還有其他的方法可以做同樣的事情,但即使它們略短一點,這似乎也是最簡單的。 – user108471

回答

1

此致:

%%timeit 
list_of_list = [(0,1,2), (0,1), (0,1,3,4), (0,1,2,3,4)] 


def findIdx(list_of_list, value_I_am_searching_for): 
    for idx, list_item in enumerate(list_of_list): 
     if value_I_am_searching_for in list_item: 
      return idx 
    return None 


findIdx(list_of_list, 3) 


1000000 loops, best of 3: 1.18 µs per loop 

Blue_note的:

%%timeit 
list_of_list = [(0,1,2), (0,1), (0,1,3,4), (0,1,2,3,4)] 
my_value = 3 
try: 
    return next(index for index, lst in enumerate(list_of_list) if my_value in lst) 
except StopIteration: 
    return None 

1 loop, best of 3: 2 s per loop 

還有一句:

%%timeit 
list_of_list = [(0,1,2), (0,1), (0,1,3,4), (0,1,2,3,4)] 


def findIdx(lst, i): 
    return [l.index(i) if i in l else 'None' for l in lst ] 


findIdx(list_of_list, 3) 

100000 loops, best of 3: 2 µs per loop 

我的意見,堅持你現在所擁有的......

編輯: 我錯過了這個...

例如,我要在第一時間發現3存在,並且它要 回報指數2

NVM。

+0

您可以在查找「value_I_am_searching_for」的第一個實例的索引後立即添加「break」語句。 – jwdasdk

1
try: 
    return next(index for index, lst in enumerate(list_of_list) if my_value in lst) 
except StopIteration: 
    return None 

圓括號裏面是一個生成器表達式。 next返回第一個元素。使用enumerate迭代迭代的索引和值。最後,使用異常最好在python檢查,既是作風和效能方面

相關問題