Как проверить, находится ли значение между значениями в списке? (Python)

#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:

Я не уверен, есть ли для этого встроенная функция, но вы можете очень легко проверить это, пройдясь по списку и выбрав переменную в качестве входных данных, которую вы хотите сравнить. Если список не отсортирован, в этом случае, возможно, вы можете сначала отсортировать список.