【问题标题】:What is the difference between these two comparisons of sets?这两组比较有什么区别?
【发布时间】:2019-10-21 07:35:44
【问题描述】:

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

例如,set('3') == set(['3']) 返回 Trueset('003') == set(['003']) 返回 False

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

【问题讨论】:

  • 一个简单的打印会让你清楚。这与['003']list('003') 的区别相同

标签: python python-3.x


【解决方案1】:

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

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

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

set() 将解压缩列表项并将它们添加为其项。有关详细信息,请阅读offical docs

【讨论】:

  • 感谢 Emad 以非常清晰简洁的方式概述了思路!很有帮助!
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      第一种情况:

      >>> 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,但由于它们是重复的,因此忽略3s 中的一个。所以你得到:{'0','3'}。如果stringlist 中,则整个字符串被视为一个元素,因此该集合只有一个元素,即{'003'}


      您可以查看更多示例:

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

      【讨论】:

        猜你喜欢
        • 2011-01-14
        • 1970-01-01
        • 2021-12-15
        • 1970-01-01
        • 1970-01-01
        • 2019-05-15
        • 1970-01-01
        相关资源
        最近更新 更多