2014-10-05 108 views
-4

我有这个,我不知道如何返回排序列表。Perksort不返回排序列表

def perkSort(lst): 
    for i in range(1, len(lst)): 
     number = lst[i] 
     j = i - 1 
     while (j >= 0) and (lst[j] > number): 
      lst[j+1] = lst[j] 
      j -= 1 
     lst[j+1] = number 

def createList (x): 
    lst = [] 
    lst = [num.split(',') for num in x.readlines()] 
    return lst 

def main(): 
    x = open(input('Enter File Name (Example - test.txt): ')) 
    lst = [createList (x)] 
    sort = perkSort(lst) 
    print(sort) 

main() 
+2

什么是你问?如果我认为你在问什么,那么你只需在函数的最后一行放置'return lst'。 – AHuman 2014-10-05 01:26:55

+1

我认为这个问题很清楚:一个Python新手在问如何做错误的事情。 PM 2Ring给出了正确的答案:“模仿list.sort,不返回任何内容并忽略默认值”。 – 2014-10-05 17:13:59

回答

0

我不知道你在问什么。但这里的东西,可以帮助你:

def perkSort(lst): 
    for i in range(1, len(lst)): 
     number = lst[i] 
     j = i - 1 
     while (j >= 0) and (lst[j] > number): 
      lst[j+1] = lst[j] 
      j -= 1 
     lst[j+1] = number 
    return lst #<-------------- 

也可以使lst全球:

def perkSort(): 
    global lst 
    for i in range(1, len(lst)): 
     number = lst[i] 
     j = i - 1 
     while (j >= 0) and (lst[j] > number): 
      lst[j+1] = lst[j] 
      j -= 1 
     lst[j+1] = number 

def createList (x): 
    global lst 
    lst = [num.split(',') for num in x.readlines()] 


def main(): 
    x = open(input('Enter File Name (Example - test.txt): ')) 
    global lst [] 
    lst = [createList (x)] 
    print(perkSort(lst)) 

main() 
+0

请不要鼓励新手使用全局变量。 – 2014-10-05 03:05:23

1

像内置Python sort(),你perkSort()修改就地列表,所以你不要不需要退货。但是,你的createList()有点搞砸了。

认为我已经正确地猜测了test.txt文件中的数据布局。下面是生成随机测试数据的短节目:

import random 

random.seed(42) 
r = range(10) 
data = '\n'.join([', '.join([str(random.randint(0,100)) for i in r]) for j in r]) 
with open('test.txt', 'w') as f: 
    f.write(data + '\n') 

而这里的这种种数据你的程序我修改的版本:

def perkSort(lst): 
    for i in range(1, len(lst)): 
     number = lst[i] 
     j = i - 1 
     while (j >= 0) and (lst[j] > number): 
      lst[j+1] = lst[j] 
      j -= 1 
     lst[j+1] = number 

def createList(x): 
    lst = [] 
    for line in x: 
     lst += [int(s) for s in line.split(',')] 
    return lst 

def main(): 
    fname = input('Enter File Name (Example - test.txt): ') 
    #fname = 'test.txt' 
    x = open(fname, 'r') 
    lst = createList(x) 
    x.close() 

    print('Unsorted') 
    print(lst) 

    perkSort(lst) 
    print('\nSorted') 
    print(lst) 

if __name__ == '__main__': 
    main()