zoukankan      html  css  js  c++  java
  • Python小白学习之路(八)—【变量】【基本数据类型分类】【集合】【集合的功能】

    一、变量

    变量的作用:记录状态的变化
    变量的值:描述不同的状态


    二、五大基本数据类型的分类

    五大基本数据类型(数字 字符串 列表 元祖 字典)

    按照可变不可变来进行分类

    可变:列表、字典

    不可变:字符串、数字、元祖

    我个人理解,所谓可变,是指当修改内容是,内容改变,地址不变。(即新修改的内容可以覆盖之前的内容即为可变)

    按照访问顺序来进行分类

    直接访问:数字
    顺序访问:字符串、列表、元祖
    映射访问:字典

    按照存放元素的个数来进行分类

    容器类型:列表、元祖、字典
    原子类型:数字、字符串

    三、基本数据类型补充——集合(set)

    set集合,是一个无序且不重复的元素集合


    定义:

    • 不同元素组成
    • 无序
    • 集合中的元素必须是不可变类型(字符串、数字、元祖)

    集合的创建:

    可以使用大括号 { } 或者 set() 函数创建集合

    注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。


    创建格式:

    S = {value1,value2,...}

    或者

    set(value)
    #集合的创建(第二个集合在打印过程中自动去除重复元素)
    s1 = set('hello')
    s2 = {123,'alex','xhg','alex'}
    print(s1,s2 )
    
    #执行结果
    {'h', 'l', 'e', 'o'} 
    {'alex', 'xhg', 123}

    集合的功能

    1.add

    • Add an element to a set.
    • This has no effect if the element is already present.
    #当添加的元素原集合中不存在时,无应答
    s1 = {123,'alex','xhg'}
    s1.add('lb')
    print(s1 )
    #执行结果
    {'alex', 123, 'lb', 'xhg'}
    #当添加的元素原集合中存在时
    s1 = {123,'alex','xhg'}
    s1.add('alex')
    print(s1 )
    #执行结果
    {'alex', 123, 'xhg'}

    2.clear

    • Remove all elements from this set.
    s1 = {123,'alex','xhg',('lucy',888),'pyh'}
    s1.clear()
    print(s1)
    
    #执行结果
    set()

    3.copy

    Return a shallow copy of a set.
    
    s1 = {123,'alex','xhg'}
    s2 = s1.copy()
    print(s2)
    
    #执行结果
    {'xhg', 123, 'alex'}

    4.difference

    • 从数学角度来讲,就是求差集(但是各自集合元素并未发生变化)
    • Return the difference of two or more sets as a new set.
    s1 = {123,'alex','xhg',888,'english',(),''}
    s2 = {'alex',888,'','lb','math'}
    
    print(s1.difference(s2))#s1集合里不同于s2集合里的元素(最终输出的元素是s1集合里的元素)
    #执行结果
    {123, 'xhg', (), 'english'}
    
    print(s2.difference(s1))#s2集合里不同于s1集合里的元素(最终输出的元素是s2集合里的元素)
    #执行结果
    {'lb', 'math'}

    求差集还可以用符号来表示:

    s1 = {123,'alex','xhg',888,'english',(),''}
    s2 = {'alex',888,'','lb','math'}
    print(s1 - s2)
    print(s2 - s1)
    #执行结果
    {123, 'xhg', (), 'english'}
    {'math', 'lb'}

    5.difference_update

    • 求差集之后对集合做更新
    • Remove all elements of another set from this set.
    s1 = {123,'alex','xhg',888,'english',(),''}
    s2 = {'alex',888,'','lb','math'}
    print(s1.difference_update(s2))
    print(s1)
    print(s2)
    
    #执行结果
    None
    {'english', 'xhg', (), 123}
    {'', 'math', 'lb', 888, 'alex'}
    #从执行结果中,我们可以看出来 s1.difference_update(s2) 是将s1集合中同s2集合中元素相同的移除,s1集合内元素进行了更新

    6.discard

    • 删除目标集合中的指定元素,若该元素不存在,则不会报错
    • Remove an element from a set if it is a member.
    • If the element is not a member, do nothing.
    s1 = {'alex',888,'','lb','math'}
    s1.discard('alex')
    print(s1)
    
    #执行结果
    {'', 'lb', 888, 'math'}

    7.intersection

    从数学角度来讲,就是求交集(但是各自集合元素并未发生变化)

    s1 = {123,'alex','xhg',888,'english',(),''}
    s2 = {'alex',888,'','lb','math'}
    print(s1.intersection(s2)) #求集合 s1 与集合 s2 共有的元素
    
    #执行结果
    {'', 'alex', 888}

    求交集还可以用符号来表示:

    s1 = {123,'alex','xhg',888,'english',(),''}
    s2 = {'alex',888,'','lb','math'}
    print(s1 & s2)

    8.intersection_update

    (同difference_update)
    求交集之后对集合做一个更新

    s1 = {123,'alex','xhg',888,'english',(),''}
    s2 = {'alex',888,'','lb','math'}
    s1.intersection_update(s2)
    print(s1,s2)
    #执行结果
    {'', 888, 'alex'} 
    {'', 'math', 888, 'lb', 'alex'}
    #从执行结果中,我们可以看出来 s1.intersection_update(s2) 是将s1集合s2集合中元素相同的更新放入s1集合

    9.isdisjoint

    • 比较两个集合是否有共有元素,如果没有的话返回 True,否则返回 False
    • Return True if two sets have a null intersection.
    s1 = {123,'alex','xhg',888,'english',(),''}
    s2 = {'lb','math'}
    print(s1.isdisjoint(s2))
    
    #执行结果
    True

    10.issubset

    • 判断一个集合是否为另一集合的子集
    • Report whether another set contains this set.
    s1 = {123,'alex','xhg',888,'english',(),''}
    s2 = {'xhg',888,'english'}
    print(s2.issubset(s1))#判断集合s2是否为集合s1的子集
    
    #执行结果
    True

    11.issuperset

    判断一个集合是否为另一集合的父集

    s1 = {123,'alex','xhg',888,'english',(),''}
    s2 = {'xhg',888,'english'}
    print(s1.issuperset(s2))#判断集合s1是否为集合s2的父集
    
    #执行结果
    True

    12.pop

    • 随机删除集合中的元素
    • Remove and return an arbitrary set element.
    • Raises KeyError if the set is empty.
    s1 = {123,'alex','xhg',888,9}
    s1.pop()
    print(s1)

    13.remove

    • 删除目标集合中的指定元素,若该元素不存在,则会报错(所以通常删除集合中指定元素,不用remove,选择discard)
    • Remove an element from a set; it must be a member.
    • If the element is not a member, raise a KeyError.
    s1 = {123,'alex','xhg',888,'english'}
    s1.remove(666)
    print(s1)

    14.symmetric_difference

    • Return the symmetric difference of two sets as a new set.
    • 从数学角度上来说,是求交叉补集
    s1 = {123,'alex','xhg',888,'english'}
    s2 = {123,'alex','xhg','love'}
    print(s1.symmetric_difference(s2))
    #执行结果
    {'love', 888, 'english'}
    #从结果上来看,交叉补集就是两个集合除去公共部分外,各自剩下的元素组成的集合


    15.symmetric_difference_update

    s1 = {123,'alex','xhg',888,'english'}
    s2 = {123,'alex','xhg','love'}
    s1.symmetric_difference_update(s2)
    print(s1,s2)
    #执行结果
    {'love', 'english', 888} 
    {'xhg', 123, 'alex', 'love'}
    #从执行结果中,我们可以看出来 s1.symmetric_difference_update(s2) 是将两集合求交叉补集并将结果更新放入s1集合

    16.union

    • 从数学角度上来说,是求并集
    • Return the union of sets as a new set.
    s1 = {123,'alex','xhg',888,'english'}
    s2 = {123,'alex','xhg','love'}
    print(s1.union(s2))
    #执行结果
    {'english', 'love', 888, 123, 'alex', 'xhg'}

    求并集还可以用符号来表示:

    s1 = {123,'alex','xhg',888,'english'}
    s2 = {123,'alex','xhg','love'}
    print(s1 | s2)
    #执行结果
    {'english', 'love', 888, 123, 'alex', 'xhg'}

    17.update

    • Update a set with the union of itself and others.
    s1 = {123,'alex','xhg',888,'english'}
    s2 = {123,'alex','xhg','love',666}
    print(s1.update(s2))
    print(s1)
    #执行结果
    {'xhg', 'love', 888, 'english', 'alex', 666, 123}
  • 相关阅读:
    tcpdump分析tcp连接的建立、传输和关闭
    链表排序:冒泡和快排
    linux文件IO操作篇 (一) 非缓冲文件
    linux文件操作篇 (四) 目录操作
    linux文件操作篇 (三) 文件状态和操作属性
    linux文件操作篇 (二) 打开和关闭文件
    linux文件操作篇 (一)文件属性与权限
    linux编程(三)多线程
    linux编程(二)进程
    linux编程(一)文件IO 目录
  • 原文地址:https://www.cnblogs.com/guoruxin/p/9877807.html
Copyright © 2011-2022 走看看