#python #sequence
#python #последовательность
Вопрос:
Привет, у меня проблема с моим кодом, и я не знаю, как ее решить. Задача такова: «Сколько последовательных чисел необходимо?» … чтобы заполнить массив. Пример: [1, 2, 4, 6] ответ должен быть 2. Это то, что я получил.
def consecutive(arr):
arr.sort()
minimum = min(arr)
maximum = max(arr)
diff = maximum - minimum - len(arr) 1
return diff
проблема в том, что когда arr равен [], он не работает. Что я могу изменить в своем коде.
Комментарии:
1. добавьте условие, если
arr
оно пустое2. Я не понимаю логики — можете ли вы немного объяснить? сортировка массива здесь бессмысленна, либо возьмите первый и последний элемент отсортированного списка, либо примените max / min
3.
max()
/min()
имеетdefault
аргумент для обработки пустых итераций
Ответ №1:
Вы можете вычислить только минимум и максимум непустого списка, поэтому у вас есть две альтернативы: вызвать исключение, если входные данные пусты, или предоставить значение по умолчанию для возврата в случае пустого списка. (В обоих случаях вызывающий объект должен решить, что нужно, если список пуст, вместо того, чтобы заставлять функцию угадывать соответствующее значение.)
- Вызовите исключение.
def consecutive(arr): if not arr: raise ValueError("List is empty") minimum = min(arr) maximum = max(arr) diff = maximum - minimum - len(arr) 1 return diff
- Укажите значение по умолчанию
def consecutive(arr, if_empty=None): if not arr: return if_empty minimum = min(arr) maximum = max(arr) diff = maximum - minimum - len(arr) 1 return diff
Обратите внимание, что ни в том, ни в другом случае вам не нужно сначала сортировать список; оба min
и max
обрабатывают несортированные списки просто отлично.
Ответ №2:
Возможно, я слишком много читаю в вопросе, но ответы, предоставленные до сих пор, а также собственный ответ OP, неверны, если arr
имеют повторяющиеся элементы, такие как [1,2,2,6]
. Итак, правильный ответ: «заимствование» кода обработки ошибок у @chepner:
def consecutive(arr):
if not arr:
raise ValueError("List is empty")
minimum = min(arr)
maximum = max(arr)
diff = maximum - minimum - len(set(arr)) 1
return diff
Здесь set(arr)
возвращаются уникальные элементы arr