将值附加到Python中的集合


Answers:


405
keep.update(yoursequenceofvalues)

例如,keep.update(xrange(11))对于您的特定示例。或者,如果由于某些其他原因必须在循环中生成值,

for ...whatever...:
  onemorevalue = ...whatever...
  keep.add(onemorevalue)

但是,当然.update,在其他可行的情况下,只需一次调用即可批量执行此操作更快,更方便。


78
.add添加一个项目,.update添加多个项目。那是对的吗?
ThorSummoner '16

16
@ThorSummoner是的,.add希望有.update一个可哈希的类型,而希望有一个可迭代的对象
Bonnie

4
如果您添加带有更新的字符串,它将在字符串中为每个字符添加一项,因为它是可迭代的!
hgolov

2
确实很重要的一点是,应将字符串作为“整个”对象添加.add,而不是.update,由于这个小细节,我最近遇到了一个偷偷摸摸的错误。
lalilulelost

276

定义集合

a = set()

使用添加附加单个值

a.add(1)
a.add(2)

使用update从元组,集合,列表或冻结集合中添加元素

a.update([3,4])

>> print(a)
{1, 2, 3, 4}

如果要添加元组或冻结集本身,请使用add

a.add((5, 6))

>> print(a)
{1, 2, 3, 4, (5, 6)}

注意:由于集合元素必须是可哈希的,并且列表被认为是可变的,因此不能将列表添加到集合中。您也不能将其他集合添加到集合中。但是,您可以从列表和集合中添加元素,如“ .update”方法所示。


105

您还可以使用|运算符来连接两个集合(集合理论中的集):

>>> 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([...])代替{...}


1
如果您有一组集合my_sets,则可以big_set = my_sets[0].union(*my_sets[1:])将它们全部合并起来
zelusp '16

45

update像这样使用:

keep.update(newvalues)

10

这个问题是第一个在Google查询“ Python如何添加要设置的元素”时显示在Google上的问题,因此,值得注意的是,如果您想将整个字符串添加到集合中,则应添加.add(),不.update()

假设您有一个foo_str内容为的字符串'this is a sentence',并且有一些bar_set等于set()

如果这样做 bar_set.update(foo_str),您设置的内容将是{'t', 'a', ' ', 'e', 's', 'n', 'h', 'c', 'i'}

如果这样做bar_set.add(foo_str),您设置的内容将是{'this is a sentence'}


3

我喜欢这样做的方法是将原始集合和想要添加的值都转换为列表,添加它们,然后将它们转换回集合,如下所示:

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'}

这样,我也可以使用相同的逻辑轻松添加多个集合,TypeError: unhashable type: 'set'如果尝试使用该.update()方法,则会得到一个提示。


2
keep.update((0,1,2,3,4,5,6,7,8,9,10))

要么

keep.update(np.arange(11))

0

对我来说,在Python 3中,它的工作方式很简单:

keep = keep.union((0,1,2,3,4,5,6,7,8,9,10))

我不知道这是否正确...

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.