python内置函数系列之set(一)(持续更新)

查看python中set介绍(ctrl + 鼠标左键):

有如下介绍:

"""
    set() -> new empty set object
    set(iterable) -> new set object
    
    Build an unordered collection of unique elements.
    """

由此可知:

  1. set函数返回值:

一个 set object (集合对象,即 一个 “无序不重复元素集”,特点 :无序,不重复)

  1. 参数:

空 或者 一个可迭代对象。

根据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对象内置方法:

  1. 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)
'''
  1. 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() [] ()
'''
  1. 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中的子对象也发生了改变。这便是浅复制,输出的两个子对象地址相同验证了图解。

  1. 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个集合作为参数时,发生的结果。需要特别注意的是,它只是将其它集合与第二个集合相比较,而返回的新集合内的元素一定满足:**只存在于第一个集合(或调用这个方法的集合)**中,但不存在于其它集合中。而存在于其它集合中且不存在于第一个集合中的元素,将不会被记录在新集合中!

  1. 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更多内置方法请看:

python内置函数系列之set(二)(持续更新)

discard、intersection、intersection_update、isdisjoint、issubset、issuperset、pop、remove、symmetric_difference、symmetric_difference_update、union、update

更多内置函数,请看本人专栏。
彦祖,点个赞再走吧

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐