Если вы хотите сохранить все пары, если это максимальная / минимальная, вы можете попробовать это (я прокомментировал, где я это упростил):
def maxminIntervals(lst):
max_diff, min_diff = float('-inf'), float('inf')
max_results, min_results = [], []
# for loop and unzip pairs to num1, num2
for num1, num2 in lst:
# define diff to compare min and max
diff = num2 - num1
# append to max_results
if diff == max_diff:
max_results.append([num1, num2])
# update a new max_results
elif diff > max_diff:
max_diff = diff
max_results = [[num1, num2]]
# append to min_results
if diff == min_diff:
min_results.append([num1, num2])
# update a new min_results
elif diff < min_diff:
min_diff = diff
min_results = [[num1, num2]]
return max_results, min_results
def test():
lst = ([2, 8], [3, 4], [2, 7], [4, 10])
max_results, min_results = maxminIntervals(lst)
print('max results:', max_results)
print('min results:', min_results)
вывод:
max results: [[2, 8], [4, 10]]
min results: [[3, 4]]
Вот 4-строчное решение, более питонное, но дороже:
from collections import defaultdict
from operator import itemgetter
def maxminIntervals2(lst):
diff_dict = defaultdict(list)
for pair in lst:
diff_dict[pair[1] - pair[0]].append(pair)
return max(diff_dict.items(), key=itemgetter(0))[1], min(diff_dict.items(), key=itemgetter(0))[1]
Надеюсь, что это поможет вам, и прокомментируйте, если у вас есть дополнительные вопросы.:)