如何向现有的set
添加值?
your_set.update(your_sequence_of_values)
例如,your_set.update([1, 2, 3, 4])
。或者,如果你必须以某种其他原因在循环中生成这些值。for value in ...:
your_set.add(value)
当然,如果情况允许,使用单个.update
调用批量进行操作更快且更方便。
您还可以使用 |
运算符将两个集合连接起来(在集合理论中称为并集):
>>> my_set = {1}
>>> my_set = my_set | {2}
>>> my_set
{1, 2}
或者使用|=
的简化形式:
>>> my_set = {1}
>>> my_set |= {2}
>>> my_set
{1, 2}
注意: 在Python 2.7之前的版本中,使用set([...])
代替{...}
。
my_sets
,那么你可以执行 big_set = my_sets[0].union(*my_sets[1:])
来将它们全部合并。 - zelusp使用update
,可以这样:
keep.update(newvalues)
.add()
而不是.update()
。foo_str
,其内容为'this is a sentence'
,并且您有一个等于set()
的集合bar_set
。bar_set.update(foo_str)
,则集合的内容将为{'t','a',' ','e','s','n','h','c','i'}
。bar_set.add(foo_str)
,则集合的内容将为{'this is a sentence'}
。我喜欢这样做:将原始集合和要添加的值都转换成列表,然后相加,最后再将它们转换回集合,就像这样:
最初的回答:
original_set = {1, 2, 3}
values_to_add = [4, 5, 6]
new_set = set(list(original_set) + values_to_add)
setMenu = {"Eggs", "Bacon"}
print(setMenu)
> {'Bacon', 'Eggs'}
setMenu = set(list(setMenu) + list({"Spam"}))
print(setMenu)
> {'Bacon', 'Spam', 'Eggs'}
setAdditions = {"Lobster", "Sausage"}
setMenu = set(list(setMenu) + list(setAdditions))
print(setMenu)
> {'Lobster', 'Spam', 'Eggs', 'Sausage', 'Bacon'}
这样我也可以轻松地使用相同的逻辑添加多个集合,如果我尝试使用.update()
方法进行操作,则会出现TypeError: unhashable type: 'set'
。
最初的回答:
big_set = my_sets[0].union(*my_sets[1:])
- Razzle Shazl我想在这里添加一个快速说明。我正在寻找三种方法中最快的方法。
我发现,无论是添加单个值还是多个值到一个集合中,都必须使用set.add()函数。这是其他方法中最有效的方法。
所以我进行了测试,以下是结果:
set.add()
耗时:0.5208224999951199set.update()
耗时:0.6461397000239231备注:如果您想了解更多分析,请查看此处:Python集合中追加值的最快方法。
对我来说,在Python 3中,它可以简单地这样工作:
keep = keep.union((0,1,2,3,4,5,6,7,8,9,10))
我不知道它是否正确...
keep.update((0,1,2,3,4,5,6,7,8,9,10))
或者
keep.update(np.arange(11))
.add
添加单个项,.update
添加多个项。这正确吗? - ThorSummoner.add
方法需要一个可散列类型作为参数,而.update
方法需要一个可迭代对象作为参数。 - Bonnie.add
而不是.update
进行添加。最近我因为这个小细节遇到了一个相当难以察觉的错误。 - Alexandreadd
和update
会改变集合对象,你可以调用{*a, *b}
返回一个新的集合对象。 - Beatriz Fonseca