[英]python list comprehension and extend()
在Python(2.7.1)中工作,但是(幾個小時)沒有意義:
>>> a = [1, 2]
>>> b = [3, 4]
>>>
>>> a.extend([b[0]])
>>> a
[1, 2, 3]
>>>
>>> a.extend([b[1]])
>>> a
[1, 2, 3, 4]
>>>
>>> m = [a.extend([b[i]]) for i in range(len(b))] # list of lists
>>> m
[None, None]
前兩個擴展按預期方式工作,但是在列表理解中壓縮相同內容時會失敗。 我究竟做錯了什么?
extend
就地修改列表。
>>> [a + b[0:i] for i in range(len(b)+1)]
[[1, 2], [1, 2, 3], [1, 2, 3, 4]]
extend
的返回值為None
。
list.extend()
在適當位置擴展列表。 在原位更改對象的Python標准庫方法始終返回None
(默認值); 您的列表a.extend()
執行了a.extend()
兩次,因此結果列表由兩個None
返回值組成。
您的a.extend()
調用可以正常工作; 如果你要打印a
它會顯示:
[1, 2, 3, 4, 3, 4]
您不會在Python解釋器中看到None
返回值,因為該解釋器從不回顯None
結果。 您可以明確地進行測試:
>>> a = []
>>> a.extend(['foo', 'bar']) is None
True
>>> a
['foo', 'bar']
extend
函數使用您就地提供的值擴展列表,並返回None
。 這就是為什么列表中有兩個None
值的原因。 我建議您這樣重寫自己的理解:
a = [1, 2]
b = [3, 4]
m = [a + [v] for v in b] # m is [[1,2,3],[1,2,4]]
對於python列表,更改列表的方法將在適當位置工作並返回None
。 這適用於extend
以及append
, remove
, insert
,...
為了回答一個較早的問題,我繪制了list
的子類,該子類的行為與您期望的list
。
這是出於教育目的。 對於利弊..請看我回答的評論。
我喜歡這種方法,因為它具有鏈接方法和流暢工作的能力,例如
li = FluentList()
li.extend([1,4,6]).remove(4).append(7).insert(1,10).reverse().sort(key=lambda x:x%2)
可能的。
a.extend()
返回None
。
您可能需要以下之一:
>>> m = a + b
>>> m
[1, 2, 3, 4]
>>> a.extend(b)
>>> a
[1, 2, 3, 4]
除此之外,如果您要遍歷列表的所有元素,則可以這樣進行:
m = [somefunction(element) for element in somelist]
要么
for element in somelist:
do_some_thing(element)
在大多數情況下,無需遍歷索引。
而且,如果您只想向列表中添加一個元素,則應使用somelist.append(element)
而不是`somelist.extend([element])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.