中位数和时间python

时间:2014-03-04 21:21:38

标签: python time median insertion-sort

基本上这里是应该返回中位数和时间的代码,但它在第32,30和6行显示错误,“全局名称'insertSort'未定义,我知道它不是已定义但我不知道如何实现它以便它可以使用此代码?

import time
start_time = 0 #starts the time from 0 seconds
def median(lst):
    start_time = time.time()
    insertionSort(lst)
    if len(lst)%2==1:
        end_time = time.time()
        print("Time: " , end_time - start_time) #prints the time of the process
        return lst[len(lst)//2]
    else:
        return (lst[(len(lst)//2)-1]+lst[(len(lst)//2)//2])/2

def distSum(lst,n):
    sum==0
    for current in lst:
        sum=sum+abs(current-bestLoc)
    return sum

def main():
    fileName = input('Enter a filename: ')
    fileName = open(fileName, "r")
    lst = []
    for inputLine in fileName:
        splittext = inputLine.split()
        place = splittext[0]
        locations = splittext[1]
        lst += [locations]
    print(lst)
    print(median(lst))

main()

2 个答案:

答案 0 :(得分:1)

一些问题:

def distSum(lst,n):
    sum==0
    for current in lst:
        sum=sum+abs(current-bestLoc)
    return sum
  1. sum是内置函数;不要将它用作变量名称(这会令人困惑,并阻止您调用该函数)。

  2. 您的意思是sum = 0(将总和设为0),而不是sum==0(总和等于0?)。

  3. 什么是bestLoc?你永远不会定义它。什么是n?你从不使用它。这个功能应该完成什么?目前尚不清楚,您还没有记录或评论过它......

  4. ...但这无关紧要,因为你永远不会使用这个功能!

  5. start_time = 0 #starts the time from 0 seconds
    def median(lst):
        start_time = time.time()
        insertionSort(lst)
        if len(lst)%2==1:
            end_time = time.time()
    
    1. 您设置了一个全局变量start_time,并且从不使用它;

    2. 您可以使用相同的名称创建一个函数局部变量(这有点令人困惑),

    3. 如果列表中包含奇数项目,您只需检查对列表进行排序所需的时间。

    4.     return (lst[(len(lst)//2)-1]+lst[(len(lst)//2)//2])/2
      
      1. ......我根本就没有言语。你是怎么编造这个的?

      2. 如果您正在寻找中值,您可能需要

        lst_len = len(lst)
        halflen = lst_len // 2
        if lst_len % 2:
            return lst[halflen]
        else:
            return (lst[halflen-1] + lst[halflen]) / 2
        
      3. def main():
            fileName = input('Enter a filename: ')
            fileName = open(fileName, "r")
        
        1. 您重复使用fileName变量;这不是非法的,但令人困惑,特别是对于大多数程序而言,它是文件对象,而不是文件名。
        2. 至于您的原始问题:看起来insertionSort需要一个项目列表并对列表进行排序。一个简单的实现是

          insertion_sort = lambda lst: lst.sort()
          

          但这可能是作弊; - )

答案 1 :(得分:0)

目前,insertion_sort对程序没有任何意义。它尚未定义。

如果你知道插入排序是如何工作的,基本上你从一个空列表开始并在其中放置数字。从一端开始,将插入的数字与列表中已有的数字进行比较,直到数字在列表中已有的两个数字之间。然后将其插入并重复该过程。

希望这足以指导您如何实施它。