2015-11-24 113 views
1

所以我有這個代碼,你會接受一個調查問卷,它會給你一個滿分50分。結果是數據/結果列表如果您在一個元組中多次使用調查問卷,那麼調查問卷就會針對每個人都包含您的姓名進行評分。它應該根據您的姓名按照字母順序打印數據並從高分到低分打印。我已經通過在另一個程序中使用填充列表測試了這一點,我將其插入到我的主代碼中,在那裏使用.dat文件,並且在標題中看到錯誤。下面是代碼:如何解決:AttributeError:'int'對象沒有屬性'排序'

results = [] 
High_Scores = [] 
for x in results: 
    temp = [] 
    y = i[1].sort(reverse=True) 
    for i in reversed(x): 
     temp.append(x) 
    test2.append(temp) 

results.sort() 
High_Scores.sort(reverse=True) 
print(results) 
print(High_Scores) 

下面是它的工作在我把它放在我的主代碼前的代碼:

test = [[ "jeff", [48, 38] ], ["ted", [17, 26, 10] ], ["lol", [19]], ["lovely", [2]]] 
    test2 = [] 
    for x in test: 
     temp = [] 
     y = x[1].sort(reverse=True) 
     for x in reversed(x): 
      temp.append(x) 
     test2.append(temp) 

    test.sort() 
    test2.sort(reverse=True) 
    print(test) 
    print(test2) 

我嘗試這樣做:

results = [] 
    High_Scores = [] 
    High_Scores = sorted(results, key = lambda tup: tup[1], reverse = True) 
    print (High_Scores) 
    for x in results: 
     temp = [] 
     y = x.sort(reverse=True) 
     for i in reversed(x): 
      temp.append(i) 
     High_Scores.append(temp) 

    results.sort() 
    High_Scores.sort(reverse=True) 
    print(results) 
    print(High_Scores) 

,並得到這個作爲錯誤:

y = x.sort(reverse=True) 
AttributeError: 'tuple' object has no attribute 'sort' 
+1

我試着運行你的代碼,我得到了'NameError:name'results'is not defined'。請[mcve]。 – Kevin

+0

對不起,我忘了在:/ – EDoggyDog

+0

哪條線上發生錯誤? 'results.sort'或'test2.sort'? – Barmar

回答

1

我覺得你的錯誤或者是在初始化之前嘗試訪問i。當你可能想要附加i時,還可以附加x。行y = x[1].sort(reverse=True)將是錯誤的,因爲x[1]將是一個int這是不能排序,這沒有任何意義,但y = x.sort(reverse=True)將排序內部列表,因爲每個循環x等於內部列表。但是,由於您使用的元組代碼將需要返工處理的元組,我將解釋


既然你有一個元組列表和第一個值是一個名字,你將需要得分的名字分開,將其轉換爲一個列表排序,附上姓名回排序分數,然後將其轉換回一個元組是不是真的有必要,但我會做到這一點沒有少

results = [('A',1,2),('B',3,4),('C',5,6)] 
High_Scores = [tuple([i[0]]+sorted(list(i[1:]), reverse=True)) for i in results] 
print High_Scores 

[('A', 2, 1), ('B', 4, 3), ('C', 6, 5)] 

所有這一切是爲每個人排序分數。這裏是一個更可讀的形式

results = [('A',1,2),('B',3,4),('C',5,6)] 
High_Scores = [] 
for i in results: 
    tmp = sorted(list(i[1:]), reverse=True) 
    tmp = [i[0]]+tmp 
    High_Scores.append(tuple(tmp)) 
print High_Scores 

列表理解現在如果你想以按名稱排序,你也可以做

from operator import itemgetter 
results = [('B',1,2),('C',3,4),('A',5,6)] 
High_Scores = [] 

results = [list(i) for i in results] 
High_Scores = sorted(results) 
High_Scores = [[i[0]]+sorted(i[1:], reverse=True) for i in High_Scores] 
print High_Scores 

[['A', 6, 5], ['B', 2, 1], ['C', 4, 3]] #I didn't convert back to tuple 

我會解釋的最後一個,因爲它是在深度之最。列表理解將元組的結果列表重構爲列表列表。它需要每個元組並將它們通過將元組轉換爲列表的list()函數。接下來,它將結果內部列表按其第一個值排序。 Last是一個列表理解,它循環遍歷每個內部列表,並從名稱中拆分得分並按相反順序對它們進行排序,然後將名稱連接到分數。在每行之後添加打印語句以查看它發生了什麼,如果這沒有意義。

+1

我認爲這個解釋可以通過說明這是如何給出AttributeError而不是NameError或UnboundLocalError或更直觀的東西來澄清的 –

+0

當列表中有東西時,我仍然得到相同的錯誤,但是當我把結果= []放在頂部它只會擺脫已附加到列表中的所有內容,並會將其打印出空 – EDoggyDog

+0

@EDoggyDog如果您從空列表開始,則以空列表結束。如果你的列表是'[1,2,3,4,5]'的形式,那麼這個解決方案將不起作用,因爲那時你將嘗試對int進行排序。請添加一個非空的樣本結果列表。 – SirParselot

相關問題