Python 为什么可以';你不能使用';在';测试一个列表是否是另一个列表的子集?

Python 为什么可以';你不能使用';在';测试一个列表是否是另一个列表的子集?,python,python-3.x,Python,Python 3.x,我正在学习Python,刚刚完成了列表部分。当我四处玩耍,想看看我能用它们做些什么时,我遇到了一些奇怪的事情: [2, 3] in [1, 2, 3, 4] == False 您不能使用关键字中的来测试列表的子集。为什么会这样 [2,3] `is not in` [1,2,3,4] [2,3] `is in` [1, [2,3] ,4] 2和3是列表中的元素,但列表[2,3]不是列表中的元素。in用于测试列表成员资格,例如,1在[1,2,3]中为True。 如果要检查子集(顺序和重复不重要

我正在学习Python,刚刚完成了列表部分。当我四处玩耍,想看看我能用它们做些什么时,我遇到了一些奇怪的事情:

[2, 3] in [1, 2, 3, 4] == False
您不能使用关键字中的
来测试列表的子集。为什么会这样

[2,3] `is not in` [1,2,3,4]

[2,3] `is in` [1, [2,3] ,4]

2和3是列表中的元素,但列表[2,3]不是列表中的元素。

in用于测试列表成员资格,例如,
1在[1,2,3]
中为
True

如果要检查子集(顺序和重复不重要),可以使用子集运算符(看起来小于或等于):
{1,2}这是
set
对象的完美使用,该对象包含一个
issubset
方法用于此确切目的:

set([2, 3]).issubset([1, 2, 3, 4]) # test if 2 and 3 are located in another iterable

这是因为
中的
检查元素是否相等。如果你有

[2, 3] in [[1,2], [2, 3], [3, 4]]
这会奏效的。这是因为
中的
查看列表,将您的元素与它正在查看的列表中的每个元素进行比较,如果任何比较为
True
,则
中的
语句为
True。

你基本上是在问为什么这个结果不是真的:

for x in [1, 2, 3, 4]:
    if x == [1,2]:
         return True

这是因为
[2,3]
实际上是而不是
[1,2,3,4]
中的

要测试子集,请使用
集合
模块中的
issubset
功能

a = [2, 3]
b = [1, 2, 3, 4]

set(a).issubset(set(b))

这是因为“in”检查列表中是否有任何项与给定项匹配

列表中的项目有1、2、3和4


您的项目是列表[2,3],它不等于上述任何一项。

这是因为在这两个列表中,项目的类型都是int而不是list

[1,2,3,4,5] does not include an item of type list i.e [2,3]. Although 2 and 3
are items in [1,2,3,4,5]

[2,3]  in [1, [2,3] ,4] returns true because [2,3] is in [1,[2,3],4,5]
您必须分别测试[1,2,3,4,5]中2或3的成员资格,才能返回True

 i.e: 2 in [1,2,3,4,5] or 3 in [1,2,3,4,5]

您可以将列表放入列表中<[1,[2,3],4]
中的代码>[2,3]也是正确的,请参见:@NightShadeQueen,不完全相同。这个问题中的op正在寻找一种检查子集的方法。我在问为什么
中的
不起作用。事后看来,这一切都很有道理:)另一种选择是将列表转换为集合并使用{2,3}。issubset{1,2,3,4,5}注:
issubset()
只是一种可能的解释<文本中的code>substr(顺序,重复)是另一种解释,例如,
“abc”中的“bc”
;和
seq中的
subseq(顺序,保留重复项,但可能存在间隙),例如
aad
abacd
中,但
aad
不在
ad
中。