2014-10-05 39 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()