SQL TOP 1 аналог для списков в Python - PullRequest
1 голос
/ 04 мая 2009

Вот пример моего входного CSV-файла:

...
0.7,0.5,0.35,14.4,0.521838919218

0.7,0.5,0.35,14.4,0.521893472678

0.7,0.5,0.35,14.4,0.521948026139

0.7,0.5,0.35,14.4,0.522002579599
...

Мне нужно выбрать верхнюю строку, где последний всплывает> случайное число. Моя текущая реализация очень медленная (скрипт имеет много итераций этого и внешних циклов):

for line in foo:
   if float(line[-1]) > random.random():
      res = line
      break
...

Как я могу сделать это лучше и быстрее?

EDIT:

Мне посоветовали использовать bisect для этой задачи, но я не знаю, как это сделать.

Ответы [ 2 ]

3 голосов
/ 04 мая 2009

Самый быстрый подход заключается в использовании bisect (при условии, что список с плавающей точкой упорядочен). Вы можете сделать это так:

import bisect

float_list = [line[-1] for line in foo]
index = bisect.bisect(float_list, random.random())
if index < len(float_list)
    result = foo[index]
else:
    result = None # None exists

Для того, чтобы это работало, необходимо заказать список с плавающей точкой.

1 голос
/ 04 мая 2009

Вы можете использовать соответствующую команду SQL, если импортируете файл CSV в SQLite . Python имеет встроенную библиотеку sqlite , которую можно использовать для запроса к базе данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...