这种差异让我感到困惑:
>>> s = "()())()"
>>> print set(s)
set([')', '('])
>>> print {s}
set(['()())()'])
为什么?
答案 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的字符串