python内置函数系列之set(一)(持续更新)
python内置函数系列之set(持续更新)查看python中set源码(ctrl+鼠标左键):有如下介绍:"""set() -> new empty set objectset(iterable) -> new set objectBuild an unordered collection of unique elements."""由此可知:set函数返回值:一个 set obje
python内置函数系列之set(一)(持续更新)
查看python中set介绍(ctrl + 鼠标左键):
有如下介绍:
"""
set() -> new empty set object
set(iterable) -> new set object
Build an unordered collection of unique elements.
"""
由此可知:
- set函数返回值:
一个 set object (集合对象,即 一个 “无序不重复元素集”,特点 :无序,不重复)
- 参数:
空 或者 一个可迭代对象。
根据set对象的特性,探讨其用法与不同。
- 特性一:不重复
可以十分方便的实现一个去重的目的。
当然,我们也可以将set对象转化为其它的可迭代对象。
去重实例:
ls = [1, 2, 2, 3, 3, 3]
x = set(ls)
print(type(x), x, list(x), tuple(x))
'''结果:
<class 'set'> {1, 2, 3} [1, 2, 3] (1, 2, 3)
'''
- 特性二:无序
注:对于无序的可迭代对象,不能通过索引的方式取值。
例:
ls = [1, 2, 2, 3, 3, 3]
x = set(ls)
print(x)
a = x[0]
print(a)
'''结果报错:
{1, 2, 3}
a = x[0]
TypeError: 'set' object is not subscriptable
'''
tips:在集合set里查找元素效率很高,超过在列表里查找的效率,这是由于两种类的底层实现原理不同。
附set对象内置方法:
- add
源码内含介绍如下:
"""
Add an element to a set.
This has no effect if the element is already present.
"""
即:添加一个元素进入集合,当此元素存在时, 无影响(啥也不做)。
实例:
ls = [1, 2, 2, 3, 3, 3]
x = set(ls)
x.add(4)
print(type(x), x, list(x), tuple(x))
'''结果:
<class 'set'> {1, 2, 3, 4} [1, 2, 3, 4] (1, 2, 3, 4)
'''
- clear
介绍:
""" Remove all elements from this set. """
即:将集合中所有元素移除(变为空集合)
实例:
ls = [1, 2, 2, 3, 3, 3]
x = set(ls)
x.clear()
print(type(x), x, list(x), tuple(x))
'''结果:
<class 'set'> set() [] ()
'''
- copy
介绍:
""" Return a shallow copy of a set. """
即:返回一个集合的浅拷贝
浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象。
下面为菜鸟教程的一张图:
如果你还不理解,请看代码结果:
实例:
a = {1: [1, 2, 3]}
b = a.copy()
print(a, b)
print(a[1])
a[1].append(4)
print(a, b)
print(id(a[1]), id(b[1]))
'''浅复制结果:
{1: [1, 2, 3]} {1: [1, 2, 3]}
[1, 2, 3]
{1: [1, 2, 3, 4]} {1: [1, 2, 3, 4]}
2560967438720 2560967438720 两个子对象指向同一个地址
'''
解释:
本实例中,b只是拷贝了a这个字典对象,但是并没有拷贝a内部的子对象,例如a[ 1 ],这导致了当a中子对象值发生改变时,b中的子对象也发生了改变。这便是浅复制,输出的两个子对象地址相同验证了图解。
-
difference
介绍
"""
Return the difference of two or more sets as a new set.
(i.e. all elements that are in this set but not the others.)
"""
即:
将两个和或多个集合进行比较,返回一个新集合,这个集合中的元素存在于**第一个集合(或调用这个方法的集合)**中,但不存在于其它集合中。
实例:
a = {1, 2, 3, (2, 2)}
b = {2, 3, 4, 9}
c = {3, 4, 5}
n = set.difference(c)
x = set.difference(b, a)
m = a.difference(b, c)
print(n, x, m)
'''结果:
{3, 4, 5} {9, 4} {1, (2, 2)}
'''
实例中,分别展示了传入1,2,3个集合作为参数时,发生的结果。需要特别注意的是,它只是将其它集合与第二个集合相比较,而返回的新集合内的元素一定满足:**只存在于第一个集合(或调用这个方法的集合)**中,但不存在于其它集合中。而存在于其它集合中且不存在于第一个集合中的元素,将不会被记录在新集合中!
- difference_update
介绍:
""" Remove all elements of another set from this set. """
即:从**第一个集合(或调用这个方法的集合)中移除所有属于其它集合但不属于第一个集合(或调用这个方法的集合)**的所有元素。
需要特别注意的是,这个方法返回值并不是一个新集合。
实例:
a = {1, 2, 3, (2, 2)}
b = {2, 3, 4, 9}
c = {3, 4, 5}
set.difference_update(c)
set.difference_update(b, a)
x = a.difference_update(b, c)
print(c, b, x, a)
'''结果:
{3, 4, 5} {4, 9} None {1, 2, (2, 2)}
'''
set更多内置方法请看:
discard、intersection、intersection_update、isdisjoint、issubset、issuperset、pop、remove、symmetric_difference、symmetric_difference_update、union、update
更多内置函数,请看本人专栏。
彦祖,点个赞再走吧
更多推荐
所有评论(0)