使用set()或{}创建set的区别

时间:2018-12-24 23:25:31

标签: python

这种差异让我感到困惑:

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

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

>>> print {s}

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

为什么?

5 个答案:

答案 0 :(得分:12)

Python documentation开始使用set()方法:

  

返回一个新的set对象,可以选择返回带有可迭代元素的对象。

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

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

答案 1 :(得分:5)

set()带有一个iterable作为参数,其项将作为集合的元素。

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

使用{},通过记下每个元素(以逗号分隔)来创建集合。

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

答案 2 :(得分:5)

写时:

set(s)

将字符串视为可迭代的字符串,并创建一个包含其元素的集合。字符串的元素是各个字符。因此,它等效于:

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

由于集合不能包含重复的元素,因此您将获得一个包含两个唯一字符'('')'的集合。

但是,当您写时:

{s}

它只是建立一个集合,其元素是变量的值。 {}语法将每个变量视为一个元素,而不是对其进行迭代。

set()函数通常用于将一种集合转换为一组元素,这就是为什么要对其进行迭代的原因。

答案 3 :(得分:2)

因为第一个:

print set(s)

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

但是第二个:

print {s}

只是将字符串存储在set中,所以带有一个元素的set总是一个元素。

要获得相同的结果(在python 3中可能会更容易):

print {i for i in s}

答案 4 :(得分:1)

第一个创建的集合仅包含唯一值,即()。而另一个是您定义的s的字符串