Python – 使用set()或{}创建集合的差异

这种差异使我感到困惑:

>>> s = "()())()"
>>> print set(s)

set([')', '('])

>>> print {s}

set(['()())()'])

为什么?


Python文档set()方法:

返回一个新的set对象,可选地包含从iterable中获取的元素。

由于字符串是可迭代的,因此该set()方法在给定字符串中创建一组所有字符。但是,由于集合不允许重复值,因此输出是包含字符串中两个唯一字符的集合:')''('

另一方面,简写语法{s}在大括号之间创建所有项的集合。由于您只插入了一个项目s(您的字符串),因此输出是一个仅包含该项目的集合。


set() 将iterable作为参数,其项目将是集合的元素。

所以,set(’my string’)将包含我传递的迭代的每个字符,即{‘m’,’y’…}

使用{},您可以通过写下每个元素来创建集合,以逗号分隔。

{‘my string’}包含一个元素,字符串’my string’


当你写:

set(s)

它将字符串视为可迭代的,并创建一个包含其元素的集合。字符串的元素是单个字符。所以这相当于:

{'(', ')', '(', ')', ')', '(', ')'}

由于集不能包含重复的元素,你得到了一套具有两个独特的人物'('')'

但是,当你写:

{s}

它只是创建一个元素,其元素是变量的值。的{}语法将每个变量为单个元件,而不是遍历它。

set()函数经常用于从一种集合转换为一组元素,这就是它迭代它的原因。


因为第一个:

print set(s)

只是从字符串中删除重复项,

但第二个:

print {s}

只是将字符串存储在其中set,因此set一个元素总是会成为一个元素。

为了得到相同的结果(在python 3中可能更容易):

print {i for i in s}
Tags:

添加评论

友情链接:蝴蝶教程