Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用set()或{}创建集合的区别_Python - Fatal编程技术网

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

Python 使用set()或{}创建集合的区别,python,Python,这种差异让我困惑: >>> s = "()())()" >>> print set(s) set([')', '(']) >>> print {s} set(['()())()']) 为什么?对于set()方法: 返回一个新对象,可以选择从iterable中获取元素 由于字符串是iterable,因此set()方法创建给定字符串中所有字符的集合。但是,由于集合不允许重复值,因此输出是一个集合,其中包含字符串中的两个唯一字符:)“和”(

这种差异让我困惑:

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

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

>>> print {s}

set(['()())()'])
为什么?

对于
set()
方法:

返回一个新对象,可以选择从iterable中获取元素

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

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

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

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

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

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

当您写入时:

set(s)
{s}
它将字符串视为一个iterable,并生成一个包含其元素的集合。字符串的元素是单个字符。因此,它相当于执行以下操作:

{'(', ')', '(', ')', ')', '(', ')'}
由于一个集合不能包含重复的元素,所以可以得到一个具有两个唯一字符
'(“
”)“
的集合

然而,当你写作时:

set(s)
{s}
它只是生成一个集合,其元素是变量的值。
{}
语法将每个变量视为单个元素,而不是对其进行迭代

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

因为第一个:

print set(s)
只是从字符串中删除重复项

但第二点:

print {s}
只需将字符串存储在
集合
中,因此带有一个元素的
集合
始终是一个元素

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


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

一个是字符集,另一个是字符串集。这是什么?
set()
constructor接受一个iterable。字符串是一个iterable,因此当您向构造函数传递单个字符串时,它将迭代该字符串,并将每个元素(即字母)传递给集合。如果您不希望出现这种行为,请将一个元组与单个字符串一起传递:
set((s,))
更正:它将字符串视为一个iterable