2011-02-24 53 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']]