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

Gen*_* Xu 6 python

这种差异使我感到困惑:

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

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

>>> print {s}

set(['()())()'])
Run Code Online (Sandbox Code Playgroud)

为什么?

yuv*_*gin 12

Python文档set()方法:

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

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

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


Thi*_*lle 5

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

所以,set('my string')将包含我传递给它的可迭代的每个字符,即{'m','y'...}

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

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


Bar*_*mar 5

当你写:

set(s)
Run Code Online (Sandbox Code Playgroud)

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

{'(', ')', '(', ')', ')', '(', ')'}
Run Code Online (Sandbox Code Playgroud)

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

但是,当你写:

{s}
Run Code Online (Sandbox Code Playgroud)

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

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