Python 为什么可以';你不能使用';在';测试一个列表是否是另一个列表的子集?
我正在学习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。 如果要检查子集(顺序和重复不重要
[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
中。