#python #list
Вопрос:
Я хочу проверить, существует ли значение между двумя числами в отсортированном списке, и распечатать, между какими двумя числами оно существует. Например, если список есть [1, 4, 8, 12, 16, 20]
, и я хочу посмотреть, между какими двумя числами 3
находится число, 1
и 4
его следует распечатать. Есть ли какой-либо способ сделать это в python, предпочтительно без импорта модуля?
Комментарии:
1. Список отсортирован?
2. Если я правильно понял, вы хотите 1, 4, даже если список такой [8, 1, 12, 4, 20, 16] верно?
3. @DaniMesejo Да, список отсортирован.
Ответ №1:
Если список отсортирован, вы можете использовать bisect.bisect:
import bisect
lst = [1, 4, 8, 12, 16, 20]
i = bisect.bisect(lst, 3)
print(lst[i - 1], lst[i])
Выход
1 4
Обновить
Без импорта используйте модуль:
lst = [1, 4, 8, 12, 16, 20]
i = next(j for j, e in enumerate(lst) if e >= 3)
print(lst[i - 1], lst[i])
Выход
1 4
Обратите внимание, что временная сложность второго подхода составляет O(n) против O(logn) bisect
. В качестве альтернативы вы могли бы реализовать разделение пополам, в конце концов, это просто двоичный поиск.
Комментарии:
1. Есть ли какой-нибудь способ сделать это без импорта модуля? Извините, что не уточняю вопрос, но сейчас я его отредактировал.
2. @DenseMage Смотрите обновление
Ответ №2:
Я не уверен, есть ли для этого встроенная функция, но вы можете очень легко проверить это, пройдясь по списку и выбрав переменную в качестве входных данных, которую вы хотите сравнить. Если список не отсортирован, в этом случае, возможно, вы можете сначала отсортировать список.