在 python 中的集合操作中添加 vs 更新
add vs update in set operations in python
如果我只想向集合中添加单个值,python 中的添加和更新操作有什么区别。
a = set()
a.update([1]) #works
a.add(1) #works
a.update([1,2])#works
a.add([1,2])#fails
谁能解释一下为什么会这样。
add
对单个元素更快,因为它正是为此目的,添加单个元素:
In [5]: timeit a.update([1])
10000000 loops, best of 3: 191 ns per loop
In [6]: timeit a.add(1)
10000000 loops, best of 3: 69.9 ns per loop
update
需要一个可迭代对象或可迭代对象,因此如果您要添加单个可哈希元素,则使用 add
如果您要添加可迭代或可哈希元素的可迭代对象,请使用 update
.
s.add(x) add element x to set s
s.update(t) s |= t return set s with elements added from t
add
添加一个元素,update
"adds"另一个可迭代set
,list
或tuple
,例如:
In [2]: my_set = {1,2,3}
In [3]: my_set.add(5)
In [4]: my_set
Out[4]: set([1, 2, 3, 5])
In [5]: my_set.update({6,7})
In [6]: my_set
Out[6]: set([1, 2, 3, 5, 6, 7])
.add()
是针对单个element
,而.update()
是针对其他集合的引入。
来自帮助():
add(...)
Add an element to a set.
This has no effect if the element is already present.
update(...)
Update a set with the union of itself and others.
add
只接受可哈希类型。列表不可散列。
set.add
将单个元素添加到集合中。所以,
>>> a = set()
>>> a.add(1)
>>> a
set([1])
有效,但它不能与可迭代对象一起使用,除非它是可哈希的。这就是 a.add([1, 2])
失败的原因。
>>> a.add([1, 2])
Traceback (most recent call last):
File "<input>", line 1, in <module>
TypeError: unhashable type: 'list'
此处,[1, 2]
被视为要添加到集合中的元素,如错误消息所述,a list cannot be hashed but all the elements of a set are expected to be hashables. Quoting the documentation、
Return a new set
or frozenset
object whose elements are taken from iterable. The elements of a set must be hashable.
在 set.update
的情况下,您可以将多个可迭代对象传递给它,它将迭代所有可迭代对象并将单个元素包含在集合中。 记住:它只能接受可迭代对象。这就是为什么当您尝试使用 1
更新它时出现错误的原因
>>> a.update(1)
Traceback (most recent call last):
File "<input>", line 1, in <module>
TypeError: 'int' object is not iterable
但是,以下会起作用,因为列表 [1]
被迭代并且列表的元素被添加到集合中。
>>> a.update([1])
>>> a
set([1])
set.update
基本上等同于就地集合并集操作。考虑以下情况
>>> set([1, 2]) | set([3, 4]) | set([1, 3])
set([1, 2, 3, 4])
>>> set([1, 2]) | set(range(3, 5)) | set(i for i in range(1, 5) if i % 2 == 1)
set([1, 2, 3, 4])
在这里,我们明确地将所有可迭代对象转换为集合,然后找到并集。有多个中间集和联合。在这种情况下,set.update
是一个很好的辅助函数。因为它接受任何迭代,你可以简单地做
>>> a.update([1, 2], range(3, 5), (i for i in range(1, 5) if i % 2 == 1))
>>> a
set([1, 2, 3, 4])
a.update(1)
在您的代码中将不起作用。 add
接受一个元素并将其放入集合中(如果它不存在)但 update
接受一个可迭代对象并将该集合与该可迭代对象合并。有点像列表的 append
和 extend
。
我猜没有人提到过来自 Hackerrank 的好资源。我想贴一下 Hackerrank 如何提到 update 和 add for set 之间的区别 python。
集是唯一值的无序包。单个集合包含任何不可变数据类型的值。
创建集
myset = {1, 2} # Directly assigning values to a set
myset = set() # Initializing a set
myset = set(['a', 'b']) # Creating a set from a list
print(myset) ===> {'a', 'b'}
修改集 - add() 和 update()
myset.add('c')
myset ===>{'a', 'c', 'b'}
myset.add('a') # As 'a' already exists in the set, nothing happens
myset.add((5, 4))
print(myset) ===> {'a', 'c', 'b', (5, 4)}
myset.update([1, 2, 3, 4]) # update() only works for iterable objects
print(myset) ===> {'a', 1, 'c', 'b', 4, 2, (5, 4), 3}
myset.update({1, 7, 8})
print(myset) ===>{'a', 1, 'c', 'b', 4, 7, 8, 2, (5, 4), 3}
myset.update({1, 6}, [5, 13])
print(myset) ===> {'a', 1, 'c', 'b', 4, 5, 6, 7, 8, 2, (5, 4), 13, 3}
希望对您有所帮助。有关 Hackerrank 的更多详细信息,here is the link.
add 方法直接将元素添加到集合中,而 update 方法将第一个参数转换为集合然后添加
该列表是可散列的,因此我们不能将可散列列表添加到不可散列集。
我们使用 add()
方法将单个值添加到集合中。
我们使用 update()
方法将序列值添加到集合中。
这里的序列是任何可迭代对象,包括list
、tuple
、string
、dict
等
如果我只想向集合中添加单个值,python 中的添加和更新操作有什么区别。
a = set()
a.update([1]) #works
a.add(1) #works
a.update([1,2])#works
a.add([1,2])#fails
谁能解释一下为什么会这样。
add
对单个元素更快,因为它正是为此目的,添加单个元素:
In [5]: timeit a.update([1])
10000000 loops, best of 3: 191 ns per loop
In [6]: timeit a.add(1)
10000000 loops, best of 3: 69.9 ns per loop
update
需要一个可迭代对象或可迭代对象,因此如果您要添加单个可哈希元素,则使用 add
如果您要添加可迭代或可哈希元素的可迭代对象,请使用 update
.
s.add(x) add element x to set s
s.update(t) s |= t return set s with elements added from t
add
添加一个元素,update
"adds"另一个可迭代set
,list
或tuple
,例如:
In [2]: my_set = {1,2,3}
In [3]: my_set.add(5)
In [4]: my_set
Out[4]: set([1, 2, 3, 5])
In [5]: my_set.update({6,7})
In [6]: my_set
Out[6]: set([1, 2, 3, 5, 6, 7])
.add()
是针对单个element
,而.update()
是针对其他集合的引入。
来自帮助():
add(...)
Add an element to a set.
This has no effect if the element is already present.
update(...)
Update a set with the union of itself and others.
add
只接受可哈希类型。列表不可散列。
set.add
将单个元素添加到集合中。所以,
>>> a = set()
>>> a.add(1)
>>> a
set([1])
有效,但它不能与可迭代对象一起使用,除非它是可哈希的。这就是 a.add([1, 2])
失败的原因。
>>> a.add([1, 2])
Traceback (most recent call last):
File "<input>", line 1, in <module>
TypeError: unhashable type: 'list'
此处,[1, 2]
被视为要添加到集合中的元素,如错误消息所述,a list cannot be hashed but all the elements of a set are expected to be hashables. Quoting the documentation、
Return a new
set
orfrozenset
object whose elements are taken from iterable. The elements of a set must be hashable.
在 set.update
的情况下,您可以将多个可迭代对象传递给它,它将迭代所有可迭代对象并将单个元素包含在集合中。 记住:它只能接受可迭代对象。这就是为什么当您尝试使用 1
>>> a.update(1)
Traceback (most recent call last):
File "<input>", line 1, in <module>
TypeError: 'int' object is not iterable
但是,以下会起作用,因为列表 [1]
被迭代并且列表的元素被添加到集合中。
>>> a.update([1])
>>> a
set([1])
set.update
基本上等同于就地集合并集操作。考虑以下情况
>>> set([1, 2]) | set([3, 4]) | set([1, 3])
set([1, 2, 3, 4])
>>> set([1, 2]) | set(range(3, 5)) | set(i for i in range(1, 5) if i % 2 == 1)
set([1, 2, 3, 4])
在这里,我们明确地将所有可迭代对象转换为集合,然后找到并集。有多个中间集和联合。在这种情况下,set.update
是一个很好的辅助函数。因为它接受任何迭代,你可以简单地做
>>> a.update([1, 2], range(3, 5), (i for i in range(1, 5) if i % 2 == 1))
>>> a
set([1, 2, 3, 4])
a.update(1)
在您的代码中将不起作用。 add
接受一个元素并将其放入集合中(如果它不存在)但 update
接受一个可迭代对象并将该集合与该可迭代对象合并。有点像列表的 append
和 extend
。
我猜没有人提到过来自 Hackerrank 的好资源。我想贴一下 Hackerrank 如何提到 update 和 add for set 之间的区别 python。
集是唯一值的无序包。单个集合包含任何不可变数据类型的值。
创建集
myset = {1, 2} # Directly assigning values to a set
myset = set() # Initializing a set
myset = set(['a', 'b']) # Creating a set from a list
print(myset) ===> {'a', 'b'}
修改集 - add() 和 update()
myset.add('c')
myset ===>{'a', 'c', 'b'}
myset.add('a') # As 'a' already exists in the set, nothing happens
myset.add((5, 4))
print(myset) ===> {'a', 'c', 'b', (5, 4)}
myset.update([1, 2, 3, 4]) # update() only works for iterable objects
print(myset) ===> {'a', 1, 'c', 'b', 4, 2, (5, 4), 3}
myset.update({1, 7, 8})
print(myset) ===>{'a', 1, 'c', 'b', 4, 7, 8, 2, (5, 4), 3}
myset.update({1, 6}, [5, 13])
print(myset) ===> {'a', 1, 'c', 'b', 4, 5, 6, 7, 8, 2, (5, 4), 13, 3}
希望对您有所帮助。有关 Hackerrank 的更多详细信息,here is the link.
add 方法直接将元素添加到集合中,而 update 方法将第一个参数转换为集合然后添加 该列表是可散列的,因此我们不能将可散列列表添加到不可散列集。
我们使用 add()
方法将单个值添加到集合中。
我们使用 update()
方法将序列值添加到集合中。
这里的序列是任何可迭代对象,包括list
、tuple
、string
、dict
等