Python- функция быстрого выбора нахождения медианы

Итак, я разработал код для функции быстрого выбора, но он не печатает медиану. У меня есть приглашение основной функции для имени файла и затем импортирую этот текстовый файл, разделив его на список цифр, это текстовый файл:

Offices 70
MedicalOffice  120
PostOffice 170
Mall 200

Он импортируется в список:

L = ['70', '120', '170', '200']

когда он проходит через функцию быстрого выбора, он выводит истекшее время, являющееся нечетным числом, которое меняется каждый раз, когда что-то вроде 1.9083486328125e-06... сначала, какое значение времени это в миллисекундах? и когда функция запускается и возвращает стержень, она выплевывает это:

>>> main()
Enter a filename: Input.txt
['70', '120', '170', '200']
Time:  1.9073486328125e-06
200

Может кто-нибудь сказать мне, почему это не работает? это код:

import time

start_time = 0

def quickSelect(L, k):
   start_time = time.time() 
   if len(L) != 0:
      pivot = L[(len(L)//2)]
      smallerList = []
   for i in L:
        if i<pivot:
           smallerList.append(i)
   largerList=[]
   for i in L:
        if i>pivot:
           largerList.append(i)
   m=len(smallerList)
   count=len(L)-len(smallerList)-len(largerList)
   if k >= m and k < m + count:
       end_time = time.time()
       print("Time: ", end_time - start_time)
       return pivot
   elif m > k:
        return quickSelect(smallerList, k)
   else:
       return quickSelect(largerList, k - m - count)
def main():

    dataFilename = input('Enter a filename: ')

    dataFile = open(dataFilename)
    L = []
    for inputLine in dataFile:
        splittext = inputLine.split()
        place = splittext[0]
        locations = splittext[1]
        L += [locations]
    print(L)
    print(quickSelect(L, len(L)//2))   

1 ответ

Решение

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

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

L.append( int(locations) )
Другие вопросы по тегам