这种差异使我感到困惑:
>>> s = "()())()"
>>> print set(s)
set([')', '('])
>>> print {s}
set(['()())()'])
Run Code Online (Sandbox Code Playgroud)
为什么?
set()
将iterable作为参数,其项目将是集合的元素.
所以,set('my string')将包含我传递给它的可迭代的每个字符,即{'m','y'...}
使用{}
,您可以通过写下每个元素来创建集合,以逗号分隔.
{'my string'}包含一个元素,字符串'my string'
当你写:
set(s)
Run Code Online (Sandbox Code Playgroud)
它将字符串视为可迭代的,并创建一个包含其元素的集合.字符串的元素是单个字符.所以它相当于:
{'(', ')', '(', ')', ')', '(', ')'}
Run Code Online (Sandbox Code Playgroud)
由于集不能包含重复的元素,你得到了一套具有两个独特的人物'('
和')'
.
但是,当你写:
{s}
Run Code Online (Sandbox Code Playgroud)
它只是创建一个元素,其元素是变量的值.的{}
语法将每个变量为单个元件,而不是遍历它.
该set()
函数经常用于从一种集合转换为一组元素,这就是它迭代它的原因.