#python #list #subset
#python #Список #подмножество
Вопрос:
У меня есть список значений, которые, как я знаю, увеличиваются, например
x = [1, 2, 3, 4, 5, 6]
Я ищу индексы подмножества, которые находятся в пределах некоторого диапазона [min, max]
. Например. Я хочу
>> subset_indices(x, 2, 4)
[1, 3]
>> subset_indices(x, 1.1, 7)
[1, 5]
Есть ли хороший pythonic способ сделать это?
Комментарии:
1. Посмотрите на модуль bisect . Он предназначен для этого и имеет именно те функции, которые вы хотите.
2. решение зависит от размера списка. От простого алгоритма поиска до дерева.
3. @KennyOstrom выглядит идеально, спасибо.
4. @jmugz3, bisect использует алгоритм двоичного поиска — AFAIK
5. Я не понимаю, что это на самом деле делает. Может кто-нибудь объяснить мне, для чего это нужно? Что такое 1.1?
Ответ №1:
Следуя рекомендациям Кенни Острома и volcano, я реализовал его просто как
import bisect
def subset_indices(sequence, minv, maxv):
low = bisect.bisect_left(sequence, minv)
high = bisect.bisect_left(sequence, maxv, lo=low)
return [low, high]
Комментарии:
1. Вы могли бы сохранить значение для минимального индекса и использовать его для поиска максимального индекса. Это сделает второй поиск более эффективным, что может повлиять на большие наборы данных.
2. @volcano Отличная идея! Я использую довольно много данных, так что это предложение определенно полезно. Я добавил это в ответ.