2016-09-28 44 views
0

我是一個新的Python編程。今天我練習排序列表。 我有這個代碼奇怪的輸出:在Python中打印一行後出現「無」字符串

​​

輸出是:

Sort by length: ['c', 'perl', 'java', 'ruby', 'python', 'haskell'] 
None 

所以,我不知道爲什麼「無」,在第二行顯示的原因。 任何人都可以幫助解決這個問題嗎?

非常感謝!

+0

'lensort'不特意返回任何東西,所以它返回'None'。將'lensort'中的'print'改爲'return',它將除去'None'歡迎使用Python。 – mgilson

+0

歡迎使用Python。第一條評論:不要命名變量'list'。這個名字有一個功能。 – dawg

回答

0

因爲您正在打印lensort函數結束處的列表而不是返回它。 Python中的函數隱式返回None,如果它明確地不是return

def lensort(list): 
    list.sort(key=lambda x: len(x)) 
    return list 

順便說一句,可以簡化傳遞的鍵功能如下:list.sort(key=len)

此外,應避免使用類名作爲變量名,如listsetdictobject

def lensort(lst): 
    ... 
+1

另外,不要使用'list'作爲變量名稱,陰影內置。 –

0

你幾乎可以雙倍打印清單。您不想在該功能中打印,因爲您已經在後面呼叫print。相反,您需要return列表,然後在撥打lensort時讓print函數打印返回的列表。

這裏有一個修正版本,應該有希望澄清我的意思:

# problem 13 
def lensort(list): 
    list.sort(key=lambda x: len(x)) 
    return list 

print "Sort by length: ", lensort(['python', 'perl', 'java', 'c', 'haskell','ruby']) 
0

.sort方法排序到位的列表。你不回報它的回報。此外,沒有lambda需要:

>>> li=['python', 'perl', 'java', 'c', 'haskell','ruby'] 
>>> li.sort(key=len) 
>>> li 
['c', 'perl', 'java', 'ruby', 'python', 'haskell'] 

如果你想有一個新的排序列表,使用sorted功能:

>>> sorted(['python', 'perl', 'java', 'c', 'haskell','ruby'], key=len) 
['c', 'perl', 'java', 'ruby', 'python', 'haskell']