【问题标题】:Python List - Searching for a value and its locationPython List - 搜索值及其位置
【发布时间】:2018-07-06 22:53:40
【问题描述】:

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

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

pos = my_list.aMethodToGetTheGreatestValuePosition()

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

【问题讨论】:

  • 这能回答你的问题吗? (我不这么认为)
  • 我重新打开它是因为问题不完全是重复的,因为它是一个独特的案例(混合了字符串和整数)

标签: python list


【解决方案1】:
my_list = ['room', 10, 'chamber', 23, 'kitchen', 8]

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

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

【讨论】:

    【解决方案2】:

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

    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)]
    

    【讨论】:

      【解决方案3】:

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

      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
      

      【讨论】:

      • 我喜欢这个
      • 我唯一要注意的是str(...) 没用
      • @jamylak 同意并修改
      • index 调用意味着你必须遍历列表两次。
      • 没问题,我只是觉得人们似乎仅仅因为这个原因而投反对票,所以决定总体解决这个问题
      【解决方案4】:

      怎么样:

      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]
      

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

      【讨论】:

      • 我对你目前的提议很感兴趣,你能给我一个数据格式结构的链接,以便我自己学习吗?否则,谢谢您的宝贵时间
      • 字典是 Python 的基础。阅读它们in the official Python tutorial(我特别链接到字典部分,但整个页面可能适合您阅读)。你可以使用{'room': 10, 'chamber': 23, 'kitchen': 8} 或类似的东西。比你的交错列表更容易处理。
      猜你喜欢
      • 2016-02-24
      • 2015-06-08
      • 2023-03-05
      • 2022-01-07
      • 2012-02-19
      • 2022-01-14
      • 1970-01-01
      • 2011-07-16
      • 1970-01-01
      相关资源
      最近更新 更多