我有这样的:Python列表输入搜索
[[(1, 'a')], [(2, 'b'), (2, 'c')], [(3, 'd'), (3, 'e')]]
我想打一个输入要搜索的A/B/C/d/e和输出这封信的指数。
例如搜索a -> index=0
,b and c -> index=1
,当d and e -> index=2
这是如何实现的Python 3.x都有
我有这样的:Python列表输入搜索
[[(1, 'a')], [(2, 'b'), (2, 'c')], [(3, 'd'), (3, 'e')]]
我想打一个输入要搜索的A/B/C/d/e和输出这封信的指数。
例如搜索a -> index=0
,b and c -> index=1
,当d and e -> index=2
这是如何实现的Python 3.x都有
您必须先遍历列表,然后为每个获取的列表遍历它以获取元组。
>>> 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
你需要一个嵌套的循环:
def find_index (data, key):
for i, d in enumerate (data):
for t in d:
if t[1] == key:
return i
这将返回(默认情况下)没有找到密钥时无。
不是很Python的做'因为我在范围内( LEN(数据))'。而是使用'enumerate()'。 –
我不知道,谢谢。我现在改了它。它确实更好。 –
你可以使用一个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}
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
你并不总是在寻找'a',所以我们让它成为一个适当的功能。 –
@tvdien ..没有。谢谢:) –
除此之外现在有一个错误。 ;) –