循环遍历列表,找到大于先前最小值的最小值

时间:2016-04-13 10:50:09

标签: python list

一个简单的问题。

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

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

e.g:

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]

3 个答案:

答案 0 :(得分:2)

它应该是非常易读的:

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

答案 1 :(得分:1)

您也可以使用内置的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

答案 2 :(得分:1)

您可以使用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