2011-02-24 62 views
1

我有以下測試代碼。在運算符中使用列表評估子集

a = ['a', 'b', 'c', 'd', 'e'] 
c = a * 3 
b = a 

b in c返回False。 b是c的子序列,而列表c包含b。那麼它爲什麼會返回錯誤呢?

在此先感謝。

+0

確定。看來在運算符中只能爲一個序列中的一個對象工作。所以它不會用於查找列表是否是另一個列表的子列表。我找到了一種通過使用元組來評估的方法。 – Sumod 2011-02-24 06:33:58

回答

5
b in c 

不行的原因是b的樣子:

['a', 'b', 'c', 'd', 'e'] 

和c的樣子:

['a', 'b', 'c', 'd', 'e', 'a', 'b', 'c', 'd', 'e', 'a', 'b', 'c', 'd', 'e'] 

換句話說,B是不是序列的元素。相反,b是一個子序列。如果你要構建C作爲如下:

c = [a, a, a] 

那麼C會是什麼樣子:

[['a', 'b', 'c', 'd', 'e'], ['a', 'b', 'c', 'd', 'e'], ['a', 'b', 'c', 'd', 'e']] 

和 「B在C」 將返回true。

希望這會有所幫助。

0

如果你有這樣的代碼:當你鍵入b in c

a = ['a', 'b', 'c', 'd', 'e'] 
c = [a] * 3 
b = a 

你會得到True

在這種情況下

c = [a] * 3(帶[]周圍)

將返回:

[['a', 'b', 'c', 'd', 'e'], ['a', 'b', 'c', 'd', 'e'], ['a', 'b', 'c', 'd', 'e']]