2017-08-15 23 views
0

的權利通常我不喜歡這樣寫道:List.append()列表中的一個循環下不能得到輸出中

a=[] 
for x in range(5): 
    a.append(x) 
print(a) 
# [0, 1, 2, 3, 4] 

然後我把循環列表中的

a=[] 
L=[a.append(x) for x in range(5)] 
print(L) 
# [None, None, None, None, None] 

我不知道它有什麼問題...

+1

「append」操作的結果是None。你期望什麼? – Alexander

+2

你不應該使用清單理解的副作用*反正*;列表理解應該只用於構建新列表,而不是用於調用循環中不相關的方法。只需使用'a = list(range(5))'。 –

+0

接下來你在做什麼?你可能甚至不需要列表,而Python 3'range'對象是一件很漂亮的事情,它支持索引,切片,成員測試,所有的效率都很高 –

回答

2

這裏的問題是,a.append(x)a列表中的一種方法,它修改了a到位。它返回None

有趣的是,你會得到:

a=[] 
L=[a.append(x) for x in range(5)] 
print(L) 
# [None, None, None, None, None] 
print(a) 
# [0, 1, 2, 3, 4] 

注意a已更新。但是,由於代碼變得非常難以理解,所以不推薦使用像這樣的副作用列表解析。

如果你想使用列表理解創建L你應該這樣做:

L = [x for x in range(5)] 
print(L) 
# [0, 1, 2, 3, 4] 

最好的代碼將hovever是簡單

L = list(range(5)) 
print(L) 
# [0, 1, 2, 3, 4] 
0

這是因爲x被添加到,但不是L.

a=[] 
    L=[a.append(x) for x in range(5)] 
    print(L) 
    # [None, None, None, None, None] 
    # print(a) will show what you want. 
相關問題