У меня есть отсортированный список целых чисел, и я хочу найти число, указанное в этом списке.Я видел много примеров, когда искали прогоны чисел, которые увеличиваются на 1, но я также хочу искать прогоны чисел, где разница между числами настраивается.
Например, скажем, у меня есть следующий список чисел:
nums = [1, 2, 3, 6, 7, 8, 10, 12, 14, 18, 25, 28, 31, 39]
Используя найденный пример здесь , я могу найти следующие числа прогонов:
[[1, 2, 3], [6, 7, 8], [10], [12], [14], [18], [25], [28], [31], [39]]
Однако я хочу поискать прогоны чиселгде разница между двумя числами может быть больше, чем просто 1. Например, я хочу, чтобы все пробеги чисел проходили с расстоянием, меньшим или равным 2.
[[1, 2, 3], [6, 7, 8, 10, 12, 14], [18], [25], [28], [31], [39]]
Или, возможно, я хочу, чтобы все пробеги чисел срасстояние меньше или равно 3.
[[1, 2, 3, 6, 7, 8, 10, 12, 14], [18], [25, 28, 31], [39]]
Вот функция, с которой я сейчас работаю, чтобы получить число пробегов на расстоянии 1.
def runs(seq, n):
result = []
for s in seq:
if not result or s != result[-1][-1] + n:
# Start a new run if we can't continue the previous one.
result.append([])
result[-1].append(s)
return result
Стекущая функция, если я установлю n=1
, то я найду все последовательные числовые последовательности.Если я установлю n=2
, то найду только [8, 10, 12, 14]
.Как я могу изменить эту функцию, чтобы найти число прогонов, которые меньше или равны n
?
Я хочу иметь возможность сделать это:
runs(num, 2)
[[1, 2, 3], [6, 7, 8, 10, 12, 14], [18], [25], [28], [31], [39]]