2015-02-23 35 views
0

嘿,我是Python的新手,我有這個練習,我想完成,但我得到以下錯誤:'int'對象沒有'sort'屬性。 我必須使用for循環從數字列表中取出數字,並將它們全部放在正方形中,然後將它們按排序順序一一列出。 我是否錯誤地使用了排序命令?或者它甚至沒有使用數字?我必須使用.append()命令使它們全部一個一個打印出來嗎? 所以這是迄今爲止我想當代碼:python'int'對象沒有屬性'sort'

start_list = [5, 3, 1, 2, 4] 
square_list = [] 
for square_list in start_list: 
    square_list ** 2 
print square_list.sort() 
+0

如果您打印square_list,會發生什麼情況? – 2015-02-23 20:55:43

+0

你的意思是如果我刪除sort()命令並打印它?然後它只打印出4 – Liblikas 2015-02-23 20:58:02

+0

準確!這是start_list中的最後一個值。看到mfitzp的答案是如何發生的。 – 2015-02-23 21:05:11

回答

0

你必須瞭解循環。

for square_list in start_list: 
    square_list ** 2 

square_list在這個例子中沒有引用你所做的空列表。它被用作從列表中提取值的模糊變量。因此,這只是每次迭代期間列表中的每個值,並且它們都是整數,因爲這就是列表中的內容。其次,你實際上並不是將廣場附加到列表中,而只是計算廣場,並對它們不做任何處理。最後,sort方法不返回任何東西,它只是改變列表而不返回值。使用等價的排序方法不會改變列表,但會返回一個新值。我認爲你最好用一些代碼來理解。

start_list = [5, 3, 1, 2, 4] 
square_list = [] 

# for loop number is ambiguous variable 

for number in start_list: 
    square = number ** 2 # calculate square to add later 
    square_list.append(square) # add the calculation 

print sorted(square_list) # print sorted version 
+0

非常感謝!我希望你得到晉升和睡眠! – Liblikas 2015-02-23 21:15:52

+0

嗯,我只是在高中,所以晉升並不是很迫切,但我會睡得很好。 – 2015-02-23 21:20:01

1

最Python的解決方案是

start_list = [5, 3, 1, 2, 4] 
square_list = [ i ** 2 for i in start_list ] 
print(sorted(square_list)) 

或oneliner:

print(sorted(i ** 2 for i in [5, 3, 1, 2, 4])) 

讓我們來剖析代碼:

# here you create an empty list and assign it to 
# square list 
square_list = [] 

# yet here you will assign each item of start_list 
# to the name square list one by one 
for square_list in start_list: 
    # then you square that number, but it is not stored anywhere 
    square_list ** 2 

# at this point, square_list contains the last element 
# of start_list, that is the integer number 4. It does 
# not, understandably, have the `.sort` method. 
print square_list.sort() 

直截了當的解決將是做:

start_list = [ 5, 3, 1, 2, 4 ] 
square_list = [] 
for element in start_list: 
    square_list.append(element ** 2) 
square_list.sort() # note that printing this would say "None" 
print square_list 
0

循環您square_list勢必整數後[準確地說,它的價值是4

要創建平方數的列表,你可以使用列表理解:

square_list = [i**2 for i in start_list]

而且在排序:

square_list.sort()

+0

他是初學者,我不認爲這裏有一個列表解析的地方。 – 2015-02-23 20:57:00

3

有三個問題:

  1. 你從分配在for循環中的square_list
  2. 您不會將結果追加到列表中(因爲上述原因,這會失敗)。

最終結果是您的square_list不是一個列表,因此無法排序。

比較下面的代碼:

start_list = [5, 3, 1, 2, 4] 
square_list = [] 
for item in start_list: 
    square_list.append(item ** 2) 

在這裏,我們遍歷列表服用item每個循環。然後我們將其平方(使用** 2),然後將其附加到square_list

  • 還有在print語句的問題:print square_list.sort()
  • 這裏你在名單上使用.sort(),然後試圖print返回值。但.sort()排序列表到位然後返回None。所以這行總是會打印None。要打印排序列表中,您既可以使用sorted()函數返回排序列表,隨時可以傳遞給print

    print sorted(square_list) 
    

    或者你可以排序打印前列表:

    square_list.sort() 
    print square_list 
    
    +0

    謝謝@DanielRoseman我已經更新了答案 – mfitzp 2015-02-23 21:04:09