代码片段之间的差异

时间:2018-04-11 15:26:23

标签: python-3.x set

以下代码片段有什么区别?因为在最后三种情况下,set union之后的结果是相同的。

>>> s=set("Hacker")
>>> s
{'k', 'a', 'e', 'H', 'r', 'c'}

>>> s.union("Rank")

{'c', 'R', 'k', 'n', 'r', 'a', 'e', 'H'}
>>> s.union({"Rank":1})

{'c', 'Rank', 'k', 'r', 'a', 'e', 'H'}
>>> s.union({"Rank":2})

{'c', 'Rank', 'k', 'r', 'a', 'e', 'H'}
>>> s.union({"Rank":3})

{'c', 'Rank', 'k', 'r', 'a', 'e', 'H'}

2 个答案:

答案 0 :(得分:1)

当你将一个对象传递给set.union时,它会被迭代。

字典会在迭代时生成,因此会忽略这些值。唯一的关键是"Rank"

一个字符串在迭代时产生字符(作为长度为1的字符串)。传递像"Rank"这样的字符串会将R,a,n和k作为1个字符长的字符串。

如果你想在输入中输入字典并仍然获得字符,只需使用双重理解:

s.union(c for x in {"Rank":2} for c in x)

答案 1 :(得分:0)

set.union()将一个iterable作为参数,并返回一个新集合,其中包含初始集合和迭代中元素的并集。

因此,如果您将dictionnary作为参数传递,它将遍历dictionnary,它实际上遍历键。因此,在实践中,您的所有s.union({"Rank": x})都会返回相同的值。