【问题标题】:loop through lists, finding minimum value greater than previous minimum遍历列表,找到大于先前最小值的最小值
【发布时间】:2016-04-13 10:50:08
【问题描述】:

一个简单的问题。

我有一个列表列表,我希望在每个列表中找到大于前一个最小值的最小值。

列表是单独排序的,对于第一个列表,我只是在寻找最小值。

例如:

my_list = [[3, 5, 8, 14, 18, 28, 30],
           [4, 6, 7, 9, 13, 15, 17, 19, 22, 26],
           [2, 11, 21, 24, 32],
           [1, 10, 12, 16, 20, 23, 25, 27, 29, 31, 33, 34]]

预期的输出是:

[3, 4, 11, 12]

【问题讨论】:

  • 什么是预期输出例如[[4,5,6],[1,2,3]],即当后续列表中没有最小值大于前一个列表中的最小值时?
  • 好点,没想到会在这种情况下发生,所以@zondo 的 ValueError 运作良好。

标签: python list


【解决方案1】:

它应该很容易阅读:

minimums = []
minimum = None
for sublist in my_list:
    try:
        minimum = min(x for x in sublist if minimum is None or x > minimum)
        minimums.append(minimum)
    except ValueError: # No numbers greater than minimum
        # Error handling

【讨论】:

    【解决方案2】:

    您也可以使用内置的 next 函数来执行此操作,因为每个 list 都已排序:

    result = []
    first = my_list[0][0]
    result.append(first)
    for val in my_list[1:]:
        try:
            first = next(el for el in val if el > first)
            result.append(first)
        except StopIteration:
            pass
    

    【讨论】:

      【解决方案3】:

      您可以使用filter

      curr_min = min(my_list[0])
      minimums = [curr_min]
      for l in my_list[1:]:
          curr_min = min(filter(lambda x: (x > curr_min), l))
          minimums.append(curr_min)
      

      如果filter 返回一个空列表,min 将引发ValueException

      【讨论】:

        猜你喜欢
        • 2015-09-12
        • 1970-01-01
        • 2020-04-02
        • 2019-05-15
        • 2012-06-21
        • 2021-08-30
        • 2021-10-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多