代码之家  ›  专栏  ›  技术社区  ›  Miloertas

Python列表-搜索值及其位置

  •  3
  • Miloertas  · 技术社区  · 8 年前

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

    my_list = ['room', 10, 'chamber', 23, 'kitchen', 8]
    
    pos = my_list.aMethodToGetTheGreatestValuePosition()
    
    print('The biggest room is ' + my_list[pos-1])
    
    4 回复  |  直到 8 年前
        1
  •  1
  •   Turn Deven    8 年前

    这样做无需多次遍历列表:

    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\u列表 将连续值馈送到 zip (借用他人 excellent answer ). 这实际上将您的平面列表转换为元组列表,如果您有以下选项,这将是存储原始数据的更好方式:

    >>> list(zip(*[iter(my_list)]*2))
    [('room', 10), ('chamber', 23), ('kitchen', 8)]
    
        2
  •  0
  •   jpp    8 年前

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

    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
    
        3
  •  0
  •   be_good_do_good    8 年前
    my_list = ['room', 10, 'chamber', 23, 'kitchen', 8]
    
    my_list[my_list.index(max(filter(lambda x: isinstance(x, int), my_list)))-1]
    

    假设输入列表中有两个相等的最大值,则取第一个。这将是对解决方案的限制

        4
  •  -1
  •   Blckknght    8 年前

    怎么样:

    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]
    

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

    推荐文章