python
  • sorting
  • indexing
  • 2013-10-12 47 views -1 likes 
    -1
    def mkEntry(file1): 
        for line in file1: 
         lst = (line.rstrip().split(",")) 
         print("Old", lst) 
         print(type(lst)) 
         lst = tuple(lst) 
         print(type(lst)) #still showing type='list' 
         print("Old2", lst) 
        sorted(lst, key=operator.itemgetter(1,2)) 
    
    
    def main(): 
        openFile = 'yob' + input("Enter the year <Do NOT include 'yob' or .'txt' : ") + '.txt' 
        file1 = open(openFile) 
        mkEntry(file1) 
    
    main() 
    

    錯誤我收到:從元組排序 - 指數超出範圍

    Traceback (most recent call last): 
        File "/Users/ranbir/Desktop/names/top101.py", line 20, in <module> 
        main() 
        File "/Users/ranbir/Desktop/names/top101.py", line 18, in main 
        mkEntry(file1) 
        File "/Users/ranbir/Desktop/names/top101.py", line 12, in mkEntry 
        sorted(lst, key=operator.itemgetter(1,2)) 
    IndexError: string index out of range 
    

    文件:

    Tom,M,1658 
    Anthony,M,985 
    Lisa,F,88976 
    Ben,M,6989 
    Shelly,F,8975 
    

    我需要幫助從FM然後最小號的排序順序人數最多。輸出應該是這樣的:

    Shelly,F,8975 
    Lisa,F,8976 
    Ben,M,698 
    Anthony,M,985 
    Tom,M,1658 
    

    所以基本上,女性第一次那麼從小到大的數字,然後再雄最小到最大(M=malef=female)。

    +0

    'lst'只是*一行*一個元組。不是元組列表。您正在嘗試對'('Shelly','F','8975')進行排序。 –

    +0

    糟糕,它假定在for循環之外。我更新了。 – user1552400

    +0

    'Ben,M,6989' in input,'Ben,M,698' in output? – falsetru

    回答

    1

    你不斷地在循環重新分配lst

    for line in file1: 
        lst = (line.rstrip().split(",")) 
        lst = tuple(lst) 
    
    sorted(lst, key=operator.itemgetter(1,2)) 
    

    你是不是所有建設項目的最終名單。你需要一個單獨的名單對象:

    results = [] 
    for line in file1: 
        lst = line.rstrip().split(",") 
        lst = tuple(lst) 
        results.append(lst) 
    
    return sorted(results, key=operator.itemgetter(1,2)) 
    

    請注意,您需要回報排序列表中了。

    這仍然不會達到您的預期,因爲您的最後一個元素(在索引2處)仍然是一個字符串。 '10'將在'91234'之前對進行排序,因爲字符串是以圖形方式排序的。請改爲:

    results = [] 
    for line in file1: 
        lst = line.rstrip().split(",") 
        lst[2] = int(lst[2]) 
        lst = tuple(lst) 
        results.append(lst) 
    
    return sorted(results, key=operator.itemgetter(1,2)) 
    
    +0

    在你的第三個代碼,它顯示錯誤:'lst [2] = float(lst [2]) IndexError:列表索引超出範圍' – user1552400

    +0

    Ooops,我有在我的文本文件中輸入空格。有用。謝謝。 – user1552400

    相關問題