2017-08-17 69 views
1

在教程中,我读过套可以因为Python 2.6这样的定义:Python:改进的设置符号?

a_set = {"Members", "of", "set"} 

但是,让我们说,我想实现a_set = set("Letters")与符号。 a_set = {"Letters"}在打印时不会呈现相同的输出:

>>> set1 = set("Letters") 
>>> set2 = {"Letters"} 
>>> print(set1, set2) 
{'L', 'r', 't', 'e', 's'} {'Letters'} 

该教程是否错误?这里发生了什么?如果set2不是一个集合,它是什么?

回答

2

您从根本上将文字符号与构造函数混淆。所有内置容器的构造函数都采用迭代器,并使用迭代元素填充容器。一个容器文字不能以这种方式工作,并不是按照这种方式工作的。请注意,这是它的工作原理与支持文字符号每个内置容器类型:

>>> list('letters') 
['l', 'e', 't', 't', 'e', 'r', 's'] 
>>> ['letters'] 
['letters'] 
>>> 

因此,这并不奇怪。

3

第一个变量set1根据单个字符串"Letters"中的字母序列创建新的set

第二个变量set2创建一个set与一个str对象。它不会迭代单个字母来创建集合。

+0

谢谢。是否可以通过使用'{}'-notation来实现'set1'? – Sahand

+0

@Sandi不是。除非你想破解CPython源代码。有没有理由不能使用'set'? –

+0

'{*'letters'}'适用于Python 3.6。虽然没有在2.x上试用它。 – ayhan

2

因为在第一组中你传递了一个迭代。将它传递到像这样的列表中,它会给你你想要的。

In [148]: set(["Letters"]) 
Out[148]: {'Letters'}