这两个集合比较有什么区别?



我正在比较一组字符串和一组字符串列表。结果似乎不一致,让我感到困惑。

例如,当set('3') == set(['3'])返回True时,set('003') == set(['003'])返回False

谁能帮忙解释为什么会这样?

要获得完整的解释,您可以打印每个示例的set()

>>>set('3')
{'3'}
>>>set(['3'])
{'3'}
>>>set('003')
{0, 3}
>>>set(['003'])
{'003'}

set('003')字符串是一个字符列表,这就是为什么它解压缩它并添加 0 和 3 作为项目。set(['003'])这里的列表有003的项目,因此它将解压缩该项目并添加它。

set()将解压缩列表项并将其添加为其项。有关深层信息的更多信息,请阅读官方文档

set('003')为该string中的每个唯一项创建一个条目(charslist(,因此它返回{'3', '0'}并且等于set(['0','0','3'])

set(['003'])list的每个项目创建一个条目,所以它返回{'003'}

因为set(['003'])返回{'003'}set('003')-{'0', '3'}

第一种情况:

>>> set('3') == set(['3'])
True
>>> set('3')
{'3'}
>>> set(['3'])
{'3'}

第二种情况:

>>> set('003') == set(['003'])
False
>>> set('003')
{'0','3'}
>>> set(['003'])
{'003'}

当你将字符串传递给tuplesetlist等时,字符串的每个字符都被视为该数据结构的一个元素。如您所知,set是无序、独特元素的集合。因此,当您在'003'上调用set时,它正在创建一个集合,并尝试一次在该集合中放置一个字符。第一个字符是0,然后是3,然后是另一个3,但是由于有重复,其中一个3被忽略。所以你会得到:{'0','3'}.在list内有string的情况下,整个字符串被视为一个元素,因此集合只得到一个元素,即{'003'}


您可以查看更多示例:

>>> tuple('abc')
('a','b','c')
>>> list('abc')
['a','b','c']

相关内容

  • 没有找到相关文章

最新更新