我正在寻找列表中最大的数字然后获取元素1位置如果有人知道如何做到这一点将非常感激。
my_list = ['room', 10, 'chamber', 23, 'kitchen', 8]
pos = my_list.aMethodToGetTheGreatestValuePosition()
print('The biggest room is ' + my_list[pos-1])
答案 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]
如果可以,我建议您更改数据格式。名称的字典映射编号(或编号的名称)将更加自然。即使列表清单也可能更容易处理。