Как найти индексы подмножества в списке?

#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 Отличная идея! Я использую довольно много данных, так что это предложение определенно полезно. Я добавил это в ответ.