Python列表 - 搜索值及其位置

时间:2018-01-27 22:03:40

标签: python list

我正在寻找列表中最大的数字然后获取元素1位置如果有人知道如何做到这一点将非常感激。

my_list = ['room', 10, 'chamber', 23, 'kitchen', 8]

pos = my_list.aMethodToGetTheGreatestValuePosition()

print('The biggest room is ' + my_list[pos-1])

4 个答案:

答案 0 :(得分:1)

这样做可以不必多次遍历列表:

my_list = ['room', 10, 'chamber', 23, 'kitchen', 8]

pos = max(enumerate(my_list[1::2]), key=lambda x: x[1])[0]

print('The biggest room is ' + my_list[2*pos])

这使用enumerate在搜索最大值的同时获取my_list的索引。

或者你可以对zip稍微聪明一点:

print('The biggest room is ' +  max(zip(*[iter(my_list)]*2), key=lambda x: x[1])[0])

依赖于使用my_list上的相同迭代器将连续值提供给zip(从另一个excellent answer借用)。如果您有这样的选择,这实质上将您的平面列表转换为元组列表,这将是存储原始数据的更好方式:

>>> list(zip(*[iter(my_list)]*2))
[('room', 10), ('chamber', 23), ('kitchen', 8)]

答案 1 :(得分:0)

这是一种方式。注意,这需要结构,即房间,然后按顺序大小。我不认为这是一个坏主意,因为无论如何你应该使用字典或元组列表。

my_list = ['room', 10, 'chamber', 23, 'kitchen', 8]

pos = my_list.index(max(my_list[1::2]))  # 23

print('The biggest room is ' + my_list[pos-1])  # chamber

答案 2 :(得分:0)

my_list = ['room', 10, 'chamber', 23, 'kitchen', 8]

my_list[my_list.index(max(filter(lambda x: isinstance(x, int), my_list)))-1]

假设输入列表中有2个相等的最大数字,它将占用第一个。这将是对解决方案的限制

答案 3 :(得分:-1)

怎么样:

my_list = ['room', 10, 'chamber', 23, 'kitchen', 8]

max_index = max(range(len(mylist)),
                key=lambda i: my_list[i] if isinstance(my_list[i], int) else float('-inf'))
max_name = my_list[max_index-1]

如果可以,我建议您更改数据格式。名称的字典映射编号(或编号的名称)将更加自然。即使列表清单也可能更容易处理。