2012-11-23 114 views
1

我有這樣的:Python列表輸入搜索

[[(1, 'a')], [(2, 'b'), (2, 'c')], [(3, 'd'), (3, 'e')]] 

我想打一個輸入要搜索的A/B/C/d/e和輸出這封信的指數。

例如搜索a -> index=0b and c -> index=1,當d and e -> index=2

這是如何實現的Python 3.x都有

回答

2

您必須先遍歷列表,然後爲每個獲取的列表遍歷它以獲取元組。

>>> my_list = [[(1, 'a')], [(2, 'b'), (2, 'c')], [(3, 'd'), (3, 'e')]] 
>>> 
>>> def search(val): 
     for index, inner_list in enumerate(my_list): 
      for nested_tuple in inner_list: 
       if val in nested_tuple: 
        return index 


>>> search('a') 
0 
>>> search('c') 
1 
>>> search('e') 
2 
+0

你並不總是在尋找'a',所以我們讓它成爲一個適當的功能。 –

+0

@tvdien ..沒有。謝謝:) –

+0

除此之外現在有一個錯誤。 ;) –

2

你需要一個嵌套的循環:

def find_index (data, key): 
    for i, d in enumerate (data): 
     for t in d: 
      if t[1] == key: 
       return i 

這將返回(默認情況下)沒有找到密鑰時無。

+2

不是很Python的做'因爲我在範圍內( LEN(數據))'。而是使用'enumerate()'。 –

+0

我不知道,謝謝。我現在改了它。它確實更好。 –

3

你可以使用一個dict comprehension實現從字母映射到指數:

data = [[(1, 'a')], [(2, 'b'), (2, 'c')], [(3, 'd'), (3, 'e')]]  
mapping = {key:index for index, items in enumerate(data) for num, key in items} 
print(mapping) 

產量

{'a': 0, 'c': 1, 'b': 1, 'e': 2, 'd': 2} 
0
 python 3.2 
    lis= [[(1, 'a')], [(2, 'b'), (2, 'c')], [(3, 'd'), (3, 'e')]] 


    # method 1. list comprehension 
    >>> [i for i,v in enumerate(lis)for g in v if "a" in g] 

    # method 2. loop 

     def search(x): 
      for i,v in enumerate(lis): 
       for k in v: 
         if x in k: return i