2014-02-11 62 views
2

我必須失去了一些東西,因爲這是奇怪...蟒蛇組轉換,列出清單怪異行爲

a = ['a', 'b', 'c'] 
a1 = ['b', 'a'] 
foo = list(set(a) - set(a1)) 

** **返回

foo == ['c'] 
type(foo) == <type 'list'> 
foo[0] == 'c' 

**現在奇怪的部分**

foo = foo.insert(0, 'z') 
foo == None 

爲什麼列表操作像insert和append導致foo是None?

以下完成我的頂級示例嘗試,但似乎荒謬。

import itertools 

a = ['a', 'b', 'c'] 
a1 = ['b', 'a'] 

foo = list(set(a) - set(a1)) 
q = [['z']] 
q.append(foo) 
q = [i for i in itertools.chain.from_iterable(q)] 
q == ['z', 'c'] 

任何洞察力將不勝感激。 謝謝。

+2

我不能再現這個,'foo == None'返回'False'。 – bereal

+0

是不是意外地輸入了'foo = foo.insert(0,'z')'?那會導致它成爲無。 –

+0

科利布里格曼是正確的。我基本上是將我的列表變量賦值爲.insert()的返回值,正如NPE指出的那樣其實是無.. –

回答

10

foo.insert()回報None,但不改變foo的方式,你會期望:

>>> foo = ['c'] 
>>> foo.insert(0, 'z') 
>>> foo 
['z', 'c'] 

如果你想結果分配到不同的變量,這裏是做這件事:

>>> foo = ['c'] 
>>> bar = ['z'] + foo 
>>> bar 
['z', 'c'] 
+1

+1,你可能在做'print foo.insert(0,'z')'? – slezica

+0

foo.inster(0,'z')被用作函數中的返回語句。所以這是字面上的...返回foo.insert(0,'z')。這就解釋了爲什麼我沒有得到任何東西。而且證明了我有時可能會痛苦無知。謝謝你向我指出這一點。 –