从构造函数或文字创建集合时,Python中的行为不同

时间:2019-11-20 12:18:51

标签: python set

我正在尝试通过使用以下代码在Python中创建Set结构:

a = set ([1,2,3])
print (a)
a ={1,2,3}
print (a)
a = {'FG'}
print (a)
a = set('FG')
print (a)

输出:

{1, 2, 3}
{1, 2, 3}
{'FG'}
{'F', 'G'}

使用两个选项创建带有数字列表的集合会产生相同的结果, 我看到如果输入类型是String,则我期望的结果是第二个结果,即创建一组字符,而第一个结果似乎忽略了字符串是字符序列,因此感到困惑。

4 个答案:

答案 0 :(得分:0)

set()构造函数将Iterable作为参数,并将在该Iterable中创建每个唯一项的集合。在这种情况下,字符串 IS 是可迭代的,因此您将看到由字符串中的每个字符组成的集合。

要获取设置的字符串,请将字符串放置在列表或元组中。

set(['abc', 'efg'])

答案 1 :(得分:0)

执行a = {'FG'}时,您将用一个元素(即字符串"FG")定义集合。

然后,当您执行a = set('FG')时,可以使用迭代器定义集合,但是在这种情况下,迭代器不是列表而是字符串。 set函数将在指定的iterable中找到所有唯一元素,因此在这种情况下,它将在给定字符串中找到所有唯一字符。

如果希望两者输出相同的结果,则必须给set函数一个包含单个字符串的列表,例如:a = set(["FG"])

答案 2 :(得分:0)

传递整数时,是以列表形式传递它。

>>>a=set([1,2,3])
>>>print(a)
{1,2,3}

您没有在列表中传递字符串,

>>>a=set('FG')
>>>print(a)
{'F','G'}

因此python对两者的解释不同。

如果将字符串作为列表传递,结果将类似于整数。

>>> a=set(['FG'])
>>> print(a)
{'FG'}

set()将可迭代对象作为输入。

答案 3 :(得分:0)

set构造函数采用一个iterable并将可迭代对象的每个元素添加到集合中。因此,当您使用可迭代列表[1,2,3]构造集合时,您自然会以{1, 2, 3}结尾。

字符串实际上是可迭代的

for i in 'abc':
    print(i)

打印:

a
b
c

遍历字符串将返回每次迭代的字符串中的每个字符。因此,当您使用字符串构造一个集合(之所以可以这样做是因为它是可迭代的)时,最终会得到一个集合,其中每个字符都成为该集合的单独成员:

set('FG') -> {'F', 'G'}

但是,当您使用 literal 创建集合时,而不是像{'FG'}那样调用构造函数时,您只是在创建一个带有单一成员'FG'