一个简单的问题。
我有一个列表列表,我希望找到每个列表中的最小值大于之前的最小值。
列表是单独排序的,对于第一个列表,我只是在寻找最小值。
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]
答案 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