为什么列表和集合之间的元素检查处理方式不同?

时间:2016-05-17 08:49:03

标签: python list set

为什么列表和集合之间的元素检查处理方式不同?

让我举几个例子:

'a' in ['aa']返回False

'a' in ('aa')返回True

2 个答案:

答案 0 :(得分:3)

当您编写('aa')时,您只是创建一个字符串,因此in显然会检查字符并评估为True。您可以使用

进行验证
>>> x = ('aa')
>>> print(type(x))
<class 'str'>

如文档tuple syntax所示,为了创建单个元素元组,您需要一个尾随逗号,即('aa',)。在这种情况下,检查元组内的'a'将导致False符合预期。

如果实际上使用

创建一个集合
x = set('aa')

这就是我想象的那样,创建一个使用字符串中的唯一字符作为元素的集合,因为您传递的字符串被视为该集合的可迭代元素来自(字符 )。因此,您的设置变为{'a'},因此in将评估为True。相反,如果您使用set literal syntax

创建一个集合
x = {'aa'}

使用您的单个字符串'aa'创建一个集合,in将评估为False。因此,这取决于您如何从'aa'初始化集合。

>>> set('dog')
{'d', 'g', 'o'}
>>> {'dog'}
{'dog'}

答案 1 :(得分:0)

因为('aa')不是元组,所以它是字符串。元组创建运算符为,。 所以在你的用例中,命令'a' in ('aa')实际检查'aa'字符串中存在的天气'a'字符是什么。

使用元组的等效操作将是'a' in ('aa',),这是假的。

查看有关python doc#tupleimplicit line joining的更多信息。