2017-01-19 61 views
-2

我寫了一個很基本的Python代碼,但沒有奏效:正確的序列

str = "asddasdvsatvsyvcstvcsacvsacvsaifteiopvnvbcshavsdsdzasbbnyju" 
dict = {} 
for i in str: 
    dict[i] = dict.get(i,0)+1 

print(list(dict.items()).sort()) 

然後我就改變功能的順序,並把他們分開,和令人驚訝地工作!

str = "asddasdvsatvsyvcstvcsacvsacvsaifteiopvnvbcshavsdsdzasbbnyju" 
dict = {} 
for i in str: 
    dict[i] = dict.get(i,0)+1 

mylist = list(dict.items()) 
mylist.sort()  
print(mylist) 

什麼,從我第一次到第二個代碼,使得它的工作發生了什麼?

+1

Python中的str是一個內置類型。請不要使用str作爲變量。 –

+1

'dict'也是一個內置類型。不應該用作變量,事實上,我很驚訝代碼的工作原理! – Anomitra

回答

1

.sort() in-place對列表進行排序(它會更改列表本身並且不會生成副本)。但它不會返回什麼(除無)。

如果你

print(list(dict.items()).sort()) 

您打印的sort()返回值 - 這是無。

但隨着

mylist.sort()  
print(mylist) 

你先排序,然後打印mylist值。那就是你想要的。

你也可以做

print(sorted(mylist)) 

但還有mylist不變。

1

list.sort()排序列表,但返回None,這就是爲什麼在第一個例子中,你看到None打印出來。

您可以使用內置的sorted,其工作原理完全相同,但會創建並返回新列表。

1

sort什麼也沒有返回。因此,print(l.sort())什麼都不打印。

然而,l.sort(),因此print(l.sort())確實排序l 列表。

因此在l.sort()之後打印l已經執行會打印一些東西,即l列表排序。