1

我有这个:

 [[(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 上怎么可能?

4

4 回答 4

3

您可以使用dict 理解来进行从字母到索引的映射:

 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}
于 2012-11-23T22:46:39.697 回答
2

你需要一个嵌套循环:

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

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

于 2012-11-23T22:36:23.890 回答
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
于 2012-11-23T22:37:11.873 回答
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
于 2012-11-24T06:29:54.230 回答