Python列表输入搜索

时间:2012-11-23 22:30:07

标签: python list tuples

我有这个:

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

我想输入搜索/ b / c / d / e并输出这封信的索引。

在搜索a -> index=0b and c -> index=1d and e -> index=2

如何在Python 3.x

上实现这一点

4 个答案:

答案 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}

答案 1 :(得分:2)

你需要一个嵌套循环:

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

当找不到密钥时,这将返回(默认情况下)无。

答案 2 :(得分: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

答案 3 :(得分: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