1

我刚刚学习 Python,我需要一些关于在列表中搜索项目的建议。我有一个包含列表列表的列表。如何在列表中搜索项目并从同一列表中返回值,如下例所示。

Example: 
myList = [['Red', 'Tomato'], ['Green', 'Pear'], ['Red', 'Strawberry'], ['Yellow', 'Lemon']]

word = 'Green'
return Pear

是否也可以在列表中找到第一个实例或第 n 个实例?

first_instance = 'Red'
return Tomato

last_instance = 'Red'
return Strawberry
4

5 回答 5

3

您可以获取所有此类元素:

instances = [x[1] for x in myList if x[0] == 'Red']

和过程instances[0]instances[-1]等。

为了只获得第一个,我会使用@eumoro 使用生成器表达式的方法。

于 2013-05-06T08:52:44.503 回答
2
myList = [['Red', 'Tomato'], ['Green', 'Pear'], ['Red', 'Strawberry'], ['Yellow', 'Lemon']]

# first_instance_red
next(elem[1] for elem in myList if elem[0] == 'Red')

# last_instance_red
next(elem[1] for elem in myList[::-1] if elem[0] == 'Red')
于 2013-05-06T08:52:53.877 回答
1

您可以使用collections.defaultdict

创建字典后使用它只需 O(1) 查找即可找到“红色”或任何其他颜色的任何实例。

>>> myList = [['Red', 'Tomato'], ['Green', 'Pear'], ['Red', 'Strawberry'], ['Yellow', 'Lemon']]
>>> from collections import defaultdict
>>> dic = defaultdict(list)
>>> for k,v in myList:
    dic[k].append(v)
...     
>>> dic['Red'][0] #first instance
'Tomato'
>>> dic['Red'][-1] #last instance
'Strawberry'
>>> dic["Yellow"][0] #first instance of Yellow
'Lemon'

在这里定义一个简单的函数来处理索引错误:

>>> def solve(n, color, dic):
    try:
        return dic[color][n]
    except IndexError:
        return "Error: {0} has only {1} instances".format(color,len(dic[color]))
...     
>>> dic = defaultdict(list)
>>> for k,v in myList:
    dic[k].append(v)
...     
>>> solve(0, "Red", dic)
'Tomato'
>>> solve(-1, "Red", dic)
'Strawberry'
>>> solve(0, "Yellow", dic)
'Lemon'
>>> solve(1, "Yellow", dic)
'Error: Yellow has only 1 instances'
于 2013-05-06T08:54:26.477 回答
0

好的。所有其他答案可能都比这更pythonic。我只是添加它,因为我认为在开始时,有一些简单的循环会有所帮助。

def find_first(key, list_of_pairs):
    for pair in list_of_pairs:
        if pair[0] == key:
            return pair[1]
    return None # hey, maybe it isn't in the list at all!

哦,你可以定义find_last为:

find_last = lambda k, lop: find_first(key, reversed(lop))

所以。在 python 中,你总是可以走这条路。除非您真的应该查看其他答案提到的列表理解。

于 2013-05-06T09:03:37.977 回答
0

使用字典理解,单行从列表中制作字典。然后,查询字典。

>>> d={x[0]:x[1] for x in myList}

d 等于{'Green': 'Pear', 'Yellow': 'Lemon', 'Red': 'Strawberry'}

>>> d['Green']
'Pear'
于 2013-05-07T04:31:17.210 回答