• Python基础-数据类型


    # 可变与不可变    
        # 可变:在值改变的情况下,id不变,则证明就是在修改原值,即可变类型    
        # 不可变:在值修改的情况下,id也跟着改变,则证明没法修改原值,而是重新申请内存空间。 即不可变类型

    一、数字类型(init和float)

    # 说明:Python中没有数字类型一说,通常我们所说的数字类型是int和float类型

    1、int型(整型)

    # 用途:
        # 记录年龄、等级、及各种号码等
    # 定义方式:
     level=10    # level=int(10)
     
    # 只能将纯数字字符串类型的数据转为init型 

    >>> res=int('188')
    >>> print(res,type(res))
    188 <class 'int'>

    >>> int('aaaaaaaasdfsadf')
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    ValueError: invalid literal for int() with base 10: 'aaaaaaaasdfsadf'

    # 常用操作及内置方法
      # 算出运算
      # 比较运算
     
    # 总结:
      # 只能存一个值
      # 不可变类型  >>> x=10
      >>> print(id(x))
      1413600448
      >>> x=11
      >>> print(id(x))
      1413600464

    2、float(浮点型)

    # 用途
          # 记录工资、身高、体重等
    
    # 定义方式
         weight=50.2      # weight=float(50.2)
    # 其他同int型

    二、str(字符串类型)

    # 用途:记录描述性质的状态,比如名字、爱好等
    # 定义方式: 在单引号、双引号、三引号里包含的一串字符
     str="'name=fred' age=15"   # str=str("'name=fred' age=15")
       
    # 强调: # 三引号可多行 # 引号嵌套类的,里面单引号的,外面必须是双引号或三引号
     
    # 可以将任意数据类型转换为str类型

    1、优先掌握的常用操作及内置方法

    1)、按索引取值(正向取&反向取)  只能取,不能存
    userinfo='root:x:0:0:root:/root:/bin/bash'
    print(userinfo[0])              # 索引号是从0开始的
    r
    print(userinfo[-1])
    h
     
    userinfo[0]='b'
    TypeError: 'str' object does not support item assignment # str不支持修改原值
    2)切片,从一个大的字符串里切除一个子字符串(顾头不顾尾,步长)
    userinfo='root:x:0:0:root:/root:/bin/bash'
    print(userinfo[0:4])      # 步长不指定,默认是1
    root                      # 顾头不顾尾:[0:4]只能取到前四个字符,第五个字符没取到
    print(userinfo[0:4:2])    # 取出索引0-4,步长为2进行取 
    ro                        # 只能取到第一个字符和第三个字符,步长为2,中间隔了1个
    print(userinfo[6:])       # 从第六个字符开始取,到结束
    :0:0:root:/root:/bin/bash
     
    # 倒着切片,注意方向要一致
    print
    (userinfo[-1:-5:-1])   # 反向取值,一定要指定步长
    hsab
    print
    (userinfo[-1::-1])     # 从反向第一个字符到最后一个,步长为1 
    hsab/nib/:toor/:toor:0:0:x:toor
    print
    (userinfo[::-1])       # 也可不指定头和尾,意指字符头到尾 
    hsab/nib/:toor/:toor:0:0:x:toor   
    3)、切分split:把一个字符串按照某种分隔符切成一个列表
    userinfo='root:x:0:0:root:/root:/bin/bash'
    print(userinfo.split(':'))      # 按照冒号切分
    ['root', 'x', '0', '0', 'root', '/root', '/bin/bash']
     
    # 注意: # split还有一个参数:最大切分次数,默认是-1,字符串中有多少分隔符,切几次 # 从左往右切
        userinfo='root:x:0:0:root:/root:/bin/bash'
    print(userinfo.split(':',1))
        ['root', 'x:0:0:root:/root:/bin/bash']
    # rsplit # 从右往左切
        userinfo='root:x:0:0:root:/root:/bin/bash'
    print(userinfo.rsplit(':',3))
        ['root:x:0:0', 'root', '/root', '/bin/bash']
    4)、join 将列表按照某种分隔符组合一个字符串
    userinfo=['root', 'x', '0', '0', 'root', '/root', '/bin/bash']
    userinfo_join='|'.join(userinfo)   # 将userinfo列表按|,组合成一个字符串
    print(userinfo_join)
    root|x|0|0|root|/root|/bin/bash    # 组合的结果
    5)、len长度
    userinfo='root:x:0:0:root:/root:/bin/bash'
    print(len(userinfo))
    31                    # 长度为31,所以只能到30 (索引是从0开始的,偷笑)
    6)、成员运算in和not in,判断一个字符串是否存在于大的字符串
    userinfo='root:x:0:0:root:/root:/bin/bash'
    print('bin' in userinfo)
    True
    print('3' in userinfo)
    False
     
    # not in  取反
    7)、strip移除字符串左右两边的指定字符
    userinfo='root:x:0:0:root:/root:/bin/bash....root'
    print(userinfo.strip('root'))
    :x:0:0:root:/root:/bin/bash....
    
    #规则:
      # 1、从左边开始找指定字符,直到非指定字符为止
      # 2、从右边开始找指定字符,直到非指定字符为止
     
    # 注意:
      # 1、strip() 默认是去除字符串左右两边的空格
      # 2、strip并不是修改原值,而是重新产生一个新值
      userinfo='root:x:0:0:root:/root:/bin/bash....root'
    print(id(userinfo))
    89149536

    userinfo=userinfo.strip('root')
    print
    (id(userinfo))
    88587248# 了解(lstrip rstrip)
      # lstrip   移除字符串左边的指定字符
      # rstrip   移除字符串右边的指定字符
    8)、循环
    userinfo='ro'
    for i in userinfo:
        print(i)
    r
    o
    
    # 按索引从头到尾循环

    for i in range(0,len(userinfo)):
    print(userinfo[i])

    2、需要掌握的操作及内置方法

    1)lower upper 
    userinfo='root:x'
    print(userinfo.upper())                  #将字符串中的小写字母转换为大写
    ROOT:X
    # lower  将字符串中的大写字母转换为小写
    2)startswitch   endswitch
    userinfo='root:x'
    print(userinfo.startswith('ro'))     # 判断字符串是否以指定字符开头
    True
    print(userinfo.endswith('x'))        # 判断字符串是否以指定字符结尾
    True
    3)、format的三种玩法
    print('my name is %s my age is %s' %(18,'fred'))         # %s的缺点,占位符和值只能按顺序匹配
    print('my name is {name} my age is {age}'.format(age=18,name='fred'))  #format可以不用根据顺序匹配,指定了变量名
    
    print('my name is {} my age is {}'.format(18,'fred'))    # 此种方式,和%s意义一行
    print('my name is {0}{0}{0} my age is {1}'.format(18,'fred'))    # 可以按索引号多次匹配
    my name is 181818 my age is fred 
    4)、replace
    userinfo='root:x:0:0:root:/root:/bin/bash'
    print(userinfo.replace('root','fred'))             # 如果不指定替换次数,默认全部替换
    fred:x:0:0:fred:/
    fred
    :/bin/bash
    print(userinfo.replace('root','fred',1))           # 指定替换次数之后,从左往右依次替换N次
    fred:x:0:0:root:/root:/bin/bash
    5)、isdigit
    # 判断字符串是否为纯数字
    print('fred123'.isdigit())
    False
    print('1929'.isdigit())
    True
     
    # 只有在字符串中包含的是纯数字的情况下才结果才为True

    3、了解的操作及内置方法

    1)、find,rfind,index,rindex,count
    # find() 方法检测字符串中是否包含子字符串 str ,如果指定 beg(开始) 和 end(结束) 范围,则检查是否包含在指定范围内,如果包含子字符串返回开始的索引值,否则返回-1。 # 从左向右检索
      # 语法: str.find(str, beg=0, end=len(string))
      # 参数
         str 指定检索的字符串
         beg 开始索引号  默认是0 
         end 结束索引号  默认是len(string)
    # rfind() 返回字符串最后一次出现的位置(从右向左查询),如果没有匹配项则返回-1。
     
    # index() 方法检测字符串中是否包含子字符串 str ,如果指定 beg(开始) 和 end(结束) 范围,则检查是否包含在指定范围内,该方法与 python find()方法一样,只不过如果str不在 string中会报一个异常
    # rindex() 返回子字符串 str 在字符串中最后出现的位置,如果没有匹配的字符串会报异常,可以指定可选参数[beg:end]设置查找的区间
    # count() 方法用于统计字符串里某个字符出现的次数。可选参数为在字符串搜索的开始与结束位置 
     
    # 注意:
       find类都是返回索引号
    2)、center,ljust,rjust,zfill
    print('我是分隔符'.center(50,'*'))
    **********************我是分隔符***********************
    
    print('我是分隔符'.ljust(50,'='))
    我是分隔符=============================================
    
    print('我是分隔符'.rjust(50,'0'))
    000000000000000000000000000000000000000000000我是分隔符
    
    print('我是分隔符'.zfill(50))
    000000000000000000000000000000000000000000000我是分隔符
     
    # zfill() ===  rjust('0')
    3)、end
    # 指定字符串后面的空格数
    # 以九九乘法表为例
    for x in range(1,10):
    for y in range(1,x+1):
    print('%sX%s=%s' %(x,y,x*y),end=' ')
    print()

    1X1=1 
    2X1=2  2X2=4   # 字符结尾+2个空格
    3X1=3  3X2=6  3X3=9 
    4X1=4  4X2=8  4X3=12  4X4=16 
    5X1=5  5X2=10  5X3=15  5X4=20  5X5=25 
    6X1=6  6X2=12  6X3=18  6X4=24  6X5=30  6X6=36 
    7X1=7  7X2=14  7X3=21  7X4=28  7X5=35  7X6=42  7X7=49 
    8X1=8  8X2=16  8X3=24  8X4=32  8X5=40  8X6=48  8X7=56  8X8=64 
    9X1=9  9X2=18  9X3=27  9X4=36  9X5=45  9X6=54  9X7=63  9X8=72  9X9=81 

    str总结:

    # 1、str为不可变类型
    # 2、是有序的(有索引)
    # 3、只能存一个值

    三、list(列表)

    # 用途:用于标识多个值,如一个人有多个爱好
    # 定义方式:中括号内用逗号隔开多个任意类型的值
    userinfo=['bin', 'x', '1', '1', 'bin', '/bin', '/sbin/nologin']     # userinfo=list(['bin', 'x', '1', '1', 'bin', '/bin', '/sbin/nologin'])
     
    # list的工作原理:list(items)
      # 1、先定义一个空了表
      # 2、然后类似调用一个for循环,从items里取出一个值放入空列表中,循环往复直到值取干净为止 

    1、优先掌握的常用操作及内置方法

    1)、按索引存取值、切片(正向反向存取):即可存可取   
    userinfo=['bin', 'x', '1', '1', 'bin', '/bin', '/sbin/nologin']
    print(userinfo[0])
    bin
    print(userinfo[0:3])
    ['bin', 'x', '1']
    print(userinfo[0:5:2])
    ['bin', '1', 'bin']
    print(userinfo[-1])
    /sbin/nologin
    print(userinfo[-1::-1])
    ['/sbin/nologin', '/bin', 'bin', '1', '1', 'x', 'bin']
    print(userinfo[-1:-5:-2])
    ['/sbin/nologin', 'bin'
     
    print(id(userinfo))
    93973280
    userinfo[0]='root'                     # 指定索引号修改原值
    print(userinfo[0],id(userinfo))
    root 93973280
     
    # 注意:此方式只能修改原值,不能新增(list有其独有的新增方法)
    userinfo=['bin', 'x', '1', '1', 'bin', '/bin', '/sbin/nologin']
    userinfo[7]='bash'
    IndexError: list assignment index out of range # 超出了list的最大索引号
    2)、len(长度)
    userinfo=['bin', 'x', '1', '1', 'bin', '/bin', '/sbin/nologin']
    print(len(userinfo))
    7
    3)、成员运算(in  &&  not in)
    print('bin' in userinfo)
    True
    print('root' not in userinfo)
    True
    4)、追加和插入(append  && extend &&  insert )
    # append()  在列表末尾添加新的元素
    # insert()  在指定索引号前插入新元素
    # extend() 函数用于在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
    userinfo=['bin', 'x', '1', '1', 'bin', '/bin', '/sbin/nologin']
    userinfo.append('this is bin user')            # 此方法没有返回值,但是会修改源列表
    print(userinfo)
    ['bin', 'x', '1', '1', 'bin', '/bin', '/sbin/nologin', 'this is bin user']
    
    userinfo.insert(0,'This is first')               # 两个参数,索引号,新元素  同样没有返回值看,但是会修改源列表
    print(userinfo)
    ['This is first', 'bin', 'x', '1', '1', 'bin', '/bin', '/sbin/nologin']
     
    userinfo=['bin', 'x', '1', '1', 'bin', '/bin', '/sbin/nologin']
    userinfo1=['root', 'x', '0', '0', 'root', '/root', '/bin/bash']


    userinfo.extend(userinfo1[0:5:2])
    # 如果不指定userinfo1的起始索引、结束索引、步长,默认将userinfo1的所有内容追加到userinfo中

    print(userinfo)

    ['bin', 'x', '1', '1', 'bin', '/bin', '/sbin/nologin', 'root', '0', 'root']
    5)、删除
    # 方式1:通用型删除(并非列表的独有删除方式)
    userinfo=['bin', 'x', '1', '1', 'bin', '/bin', '/sbin/nologin']
    print(userinfo)           
    ['bin', 'x', '1', '1', 'bin', '/bin', '/sbin/nologin']    #删除前
    
    del userinfo[-1]                     # 次方法没有返回值       
    print(userinfo)
    ['bin', 'x', '1', '1', 'bin', '/bin']    #删除后
    
    # 方式2 remove
    # remove() 函数用于删除列表中某个值的第一个匹配项。
    userinfo=['bin', 'x', '1', '1', 'bin', '/bin', '/sbin/nologin']
    userinfo.remove('bin')         # 无返回值,userinfo中bin的第一个匹配项
    print(userinfo)
    ['x', '1', '1', 'bin', '/bin', '/sbin/nologin']
    
    # 方式3 pop
    # pop()   此方法会删除指定索引号对应的元素,并返回该元素的值
    userinfo=['bin', 'x', '1', '1', 'bin', '/bin', '/sbin/nologin']
    print(userinfo.pop())                 # 默认删除最后一个索引(-1)
    /sbin/nologin                         # 返回该元素的值
    print(userinfo)
    ['bin', 'x', '1', '1', 'bin', '/bin']
    print(userinfo.pop(0))                # 可指定索引号
    bin
    print(userinfo)
    ['x', '1', '1', 'bin', '/bin']
    6)、循环
    userinfo=['bin', 'x']     # 根据索引循环(0,len(userinfo))
    for i in userinfo:
        print(i)

    2、需要掌握的操作

    1)count
    # count() 用于统计指定元素在列表中出现的次数
    userinfo=['bin', 'x', '1', '1', 'bin', '/bin', '/sbin/nologin']
    print(userinfo.count('bin'))
    2
    2)、index
    # index() 函数用于从列表中找出某个值第一个匹配项的索引位置
    userinfo=['bin', 'x', '1', '1', 'bin', '/bin', '/sbin/nologin']
    print(userinfo.index('bin'))
    0
    3)sort
    # sort() 函数用于对原列表进行排序,如果指定参数,则使用比较函数指定的比较函数
    list1=[5,2,4,8,9,10]
    list1.sort()                    # 默认是升序
    print(list1)
    [2, 4, 5, 8, 9, 10]
    
    
    list1.sort(reverse=True)        # reverse=True  降序 
    [10, 9, 8, 5, 4, 2]
    print(list1)

    练习:

    # 列表模拟队列 :先进先出
    
    # 入队:
    list=[]
    list.append('first')
    list.append('second')
    list.append('third')
    print(list)
    ['first', 'second', 'third']
    
    #出队:
    print(list.pop(0))
    print(list.pop(0))
    print(list.pop(0))
    first
    second
    third
    
    # 列表模拟堆栈  先进后出
    
    # 入栈 
    list=[]
    list.append('first')
    list.append('second')
    list.append('third')
    print(list)
    ['first', 'second', 'third']
    
    # 出栈
    print(list.pop())
    print(list.pop())
    print(list.pop())
    third
    second
    first

    总结:

    # 1、列表类型可以存多个值
    # 2、是有序的
    # 3、可变类型

    四、dict(字典)

    # 用途:存多个种类不同的值
    # 定义方式:在{}内用逗号隔开多个元素,每个元素都是key:value的形式。key对value有描述性的功能,
       # value可以是任意类型,而key必须是不可变类型且唯一
       # 即字典可以是int float tuple str  通常是字符串类型
    
    d1={'name':'fred','age':18,'commany':'9you'}    # d=dict({'name':'fred','age':18,'commany':'9you'})
    d2=dict([['nane','fred'],['age',18]])           # dict转换列表
    
    d3=dict(x=1,y=2,z=3)                            # dict转换元组
    
    d4={}.fromkeys(('name','age','sex'),None)       # 初始化字典

    1、优先掌握的常用操作及内置方法

    1)、按key存取值
    d1={'name':'fred','age':18,'commany':'9you'}
    print(d1['name'])       # 按key取值 
    fred
    d1['name']='Li'         # 按key改值
    print(d1)
    {'name': 'Li', 'age': 18, 'commany': '9you'}

    d1['weight']=50.4
    # 新增key
    print(d1)
    {'name': 'fred', 'age': 18, 'commany': '9you', 'weight': 50.4}
    2)、len(长度)
    d1={'name':'fred','age':18,'commany':'9you'}
    print(len(d1))      # dict len统计的是key的个数
    3)成员运算(判断的是字典的key)
    d1={'name':'fred','age':18,'commany':'9you'}
    
    print('name' in d1)
    True
    4)、删除
    # pop()删除指定key
    # 字典 pop() 方法删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值
    d1={'name': 'fred', 'age': 18, 'commany': '9you', 'weight': 50.4}
    print(d1.pop('sex',None))              # 如果要pop的key不存在,一定要指定默认返回值,否则会报错
    None
    print(d1)
    {'name': 'fred', 'age': 18, 'commany': '9you', 'weight': 50.4}
    
    print(d1.pop('weight'))                # 如果key存在,则返回key对应的值
    50.4
    print(d1) 
    {'name': 'fred', 'age': 18, 'commany': '9you'}
     
    # 字典 popitem() 方法随机返回并删除字典中的一对键和值(一般删除末尾对)
      #如果字典已经为空,却调用了此方法,就报出KeyError异常。
    dict={'name': 'fred', 'age': 18, 'commany': '9you', 'weight': 50.4}
    
    print(dict.popitem())       # 以元组形式返回一对键和值
    ('weight', 50.4)
    print(dict.popitem())
    ('commany', '9you')
    5)、修改key对应的value
    # update() 如果key存在,则修改其value。 如果key不存在,则新增   该方法,返回值为None
    dict={'name': 'fred', 'age': 18, 'commany': '9you'}
    dict.update({'name':'Li'})
    print(dict)
    {'name': 'Li', 'age': 18, 'commany': '9you'}
    dict.update({'sex':'male'})
    print(dict)
    {'name': 'Li', 'age': 18, 'commany': '9you', 'sex': 'male'}
    
    
    # setdefault() 如果key值存在,则不修改源,并返回key的值 如果key不存在,则新增此key,并返回其对应的值
    dict={'name': 'fred', 'age': 18, 'commany': '9you'}
    
    print(dict.setdefault('name','Li'))
    fred
    print(dict.setdefault('sex','male'))
    male
    print(dict)
    {'name': 'fred', 'age': 18, 'commany': '9you', 'sex': 'male'}
    6)、keys  values  items 
    Python2.7  和 Python3.6 差别
    msg_dic={
    'apple':10,
    'tesla':100000,
    'mac':3000,
    'lenovo':30000,
    'chicken':10,
    }
    print(msg_dic.items())
    [('tesla', 100000), ('mac', 3000), ('lenovo', 30000), ('apple', 10), ('chicken', 10)]     
    print(msg_dic.keys())
    ['tesla', 'mac', 'lenovo', 'apple', 'chicken']
    print(msg_dic.values())
    [100000, 3000, 30000, 10, 10]
    
    # 总结:python2.7会把字典中所有的key
    /value/ietms取出来,然后申请的内存空间,调取list功能把这些key/
    value一次性存进去。浪费了一倍的内存空间
    
    msg_dic={
    'apple':10,
    'tesla':100000,
    }
    print(msg_dic.items())
    dict_items([('apple', 10), ('tesla', 100000)])
    
    print(list(msg_dic.items()))     # 将item转换成Python2的存储形式
    [('apple', 10), ('tesla', 100000)]
    
    print(msg_dic.keys())
    print(type(msg_dic.items()),msg_dic.items())
    
    print(list(msg_dic.keys()))      # 将keys转换成Python2的存储形式
    ['apple', 'tesla']
    
    print(msg_dic.values())
    dict_values([10, 100000])        # 将values转换成Python2存储的形式
    
    print(list(msg_dic.values()))
    [10, 100000]
    
    # 总结:
      # Python3在此处做了优化,一次性取出来太浪费内存空间,那就将items/keys/values存成dict_items/dict_keys/dict_values这种类型,此类型仅占很小的内存空间
      # 如果要取对应key/value/items的值 可通过for循环一个个取
     
    7)、循环
    msg_dic={
    'apple':10,
    'tesla':100000,
    }
    
    for key in msg_dic.keys():
        print(key)
    
    for values in msg_dic.values():
        print(values)
    
    
    for key,values in msg_dic.items():
        print(key,values)

    8)、get

    info={'name':'lichunke','age':18,'company':'9you'}
    print(info.get('name'))
    lichunke
    
    #取一个不存在的key,也不会报错,返回一个空值(也可自定义输出),代码容错性高
    info={'name':'lichunke','age':18,'company':'9you'}
    print(info.get('name11111'))
    None
    
    #自定义输出
    info={'name':'lichunke','age':18,'company':'9you'}
    print(info.get('name11111','null'))
    null
    示例
    统计s变量中的每个单词出现的个数#1、比较low的做法s='hello alex alex say hello sb sb'
    words=s.split()    #['hello', 'alex', 'alex', 'say', 'hello', 'sb', 'sb']
    d={}
    for word in words:
        if word not in d:
            d[word]=1            # 当word第一次出现,它的次数为1,即value为1
        else:
            d[word]+=1           # 当word第二次出现,则它的次数+1 
    print(d) {'hello': 2, 'alex': 2, 'say': 1, 'sb': 2} 
    
    2、骚操作
    s='hello alex alex say hello sb sb'
    words=s.split()
    d={}
    for word in words:    
        d.setdefault(word,words.count(word))      # setdefault 如果key不存在,则新增,如果存在,则不修改原值 
    print(d)

      9)、sorted()对字典的value进行排序

      

    '''
    sorted():
        sorted(iterable,key,reverse),sorted一共有iterable,key,reverse这三个参数
        iterable: 可迭代的对象,例如是dict.items() dict.keys()
        key: 是一个函数,用来选取参与比较的元素
        reverse: 则是用来指定排序是降序还是升序,reverse=true 是降序    reverse=false 是升序   默认是false 
    '''
    
    # sorted函数按value值对字典进行排序
    # 要对字典的value排序则需要用到key参数,使用lambda表达式的方法:
    dic = {'www.abc.com': 2, 'hi.abc.com.cn': 1}
    res1 = sorted(dic.items(), key=lambda x: x[1], reverse=True)
    # 结果: [('www.abc.com', 2), ('hi.abc.com.cn', 1)]
    
    '''
    dic.items()实际上是降dic转换为可迭代对象,迭代对象的元素为('www.abc.com',2)、('hi.abc.com.cn',1),items()方法将字段的元素转化为元组
    key参数对应的lambda表达式的意思是选取元组中的第二个元素作为比较参数(key=lambda x: x[0],选取第一个元素作为比较对象  lambda x:y中x表示输出参数  也表示lambda函数的返回值 )
    
    注意: 排序后的返回值是一个list,而原字典中的元素被转换为list中的元组
    '''

    总结:

    # 1、字典是可变类型
    # 2、是无序的
    # 3、可以存多个值

    五、tuple(元组)

    # 用途:不可变的列表
    # 定义方式:在小括号内用逗号隔开的多个元素
    t=('a','b','c') # t=tuple(('a','b','c'))
    print(type(t))
    <class 'tuple'>

    常用操作及内置方法:

    1)按索引取值(正向+方向)只能取,不能存改
    userinfo=('bin', 'x', '1', '1', 'bin', '/bin', '/sbin/nologin')
    
    print(userinfo[0])
    bin
    
    print(userinfo[0:6:2])
    ('bin', '1', 'bin')
    
    print(userinfo[::-1])
    ('/sbin/nologin', '/bin', 'bin', '1', '1', 'x', 'bin')
    
    print(userinfo[:-5:-2])
    ('/sbin/nologin', 'bin')
    
    userinfo[1]='bin'
    TypeError: 'tuple' object does not support item assignment         # 元组不支持改值
    2)len
    userinfo=('bin', 'x', '1', '1', 'bin', '/bin', '/sbin/nologin')
    print(len(userinfo))
    7
    3)成员运算
    userinfo=('bin', 'x', '1', '1', 'bin', '/bin', '/sbin/nologin')
    print('bin' in userinfo)
    True
    print('root' not in userinfo)
    True
    4)循环
    userinfo=('bin', 'x')
    for i in userinfo:
        print(i)    
    bin
    x
    4)count
    userinfo=('bin', 'x', '1', '1', 'bin', '/bin', '/sbin/nologin')
    print(userinfo.count('bin'))
    2
    5)index
    userinfo=('bin', 'x', '1', '1', 'bin', '/bin', '/sbin/nologin')
    print(userinfo.index('bin'))
    0

    总结:

    # 1、元组是不可变类型
    # 2、是有序的
    # 3、可以存多个值

    六、set(集合)

    # 作用:关系运算  去重
    # 定义:大括号内逗号分隔开多个元素,
       #注意:
       # 每一个元素必须是不可变类型
       # 集合内元素不能重复(本身有去重的作用)
       # 集合元素是无序的
    # s={1,2,3,4,6}    # s=set({1,2,3,4,6})print(type(s))
    <class 'set'>
    
    # 定义空集合:
    s=set()        # 注意不是 s={}  这就成字典了

    1、优先掌握的内置方法和常用操作

    1)、关系运算
    basket={'apple','pear','orange','banana'}
    basket1={'peach','pear','fig','grape'}
    
    # 求两个菜篮子里共有的水果,即求两集合的交集
    print(basket & basket1)
    print(basket.intersection(basket1))
    
    # 求basket里有的水果,在basket1里没有的,即求两个集合的差集  (有方向的)
    print(basket - basket1)
    print(basket.difference(basket1))
    
    # 反之就是求basket1里有,而basket里没有的
    print(basket1 - basket)
    print(basket1.difference(basket))
    
    # 求两个菜篮子里的所有水果,即并集
    print(basket | basket1)
    print(basket.union(basket1))
    
    # 求没有同时在两个篮子里的水果,即对称差集
    print(basket ^ basket1)
    print(basket.symmetric_difference(basket1))
    2)、子集父集
    # 注意:只有两个集合存在包含于包含的关系是,才可以进行大小比较
    s1={1,2,3,4}
    s2={1,2}
    
    print(s1 >= s2)                  # s1是s2的父集
    print(s1.issuperset(s2))         # 等同于s1 >= s2
    
    
    print(s2 <= s1)                  #反过来s2是s1的子集
    print(s2.issubset(s1))           #等同于s2 <= s1
    3)、删除元素
    s={1,2,3,4}
    
    print(s.pop())        # 随机删除,返回被删除的元素
    print(s.discard(2))   # 指定元素删除,返回值为None   如果元素不存在,也不报错
    print(s.remove(4))    # 指定元素删除,返回值为None,如果元素不存在,则报错
    4)、去重
    # 去重:
    # 局限性:
      # 不能保证原来的元素顺序
      # 针对可变类型不能去重
    
    userinfo=['bin', 'x', '1', '1', 'bin', '/bin', '/sbin/nologin']
    s1=set(userinfo)
    print(s1)
    {'x', 'bin', '/bin', '1', '/sbin/nologin'}
    5)、成员运算和len for循环和其他数据类型一样

    练习:

    # 需求:
    #1、列表内的元素有可变类型
    #2、去重之后要保持原来顺序
    info=[
        {'name':'egon','age':18},
        {'name':'alex','age':73},
        {'name':'egon','age':18},
        {'name': 'lxx', 'age': 19},
        {'name':'egon','age':18},
        {'name':'lxx','age':19},
    ]
    
    s=[]
    
    for i in info:
        if i not in s:
            s.append(i)
    info=s
    print(info)
    [{'name': 'egon', 'age': 18}, {'name': 'alex', 'age': 73}, {'name': 'lxx', 'age': 19}]

    总结:

    # 1、集合是无序的
    # 2、是可变的
    # 3、可以存多个值 
    
    
    # 可哈希和不可哈希
    
    # 1、可哈希的数据类型为不可变类型
    # 2、不可哈希的数据类型为可变类型
  • 相关阅读:
    14.从m个球中取出n个球的所有组合情况
    13.输入一个数,求1! + 3!
    centos LVM详解
    git的团队协作开发
    centos-yum离线源
    检测 HTML5CSS3JAVASCRIPT 在浏览器的适应情况
    J2EE 中 The function valueOf must be used with a prefix when a default namespace is not specified 错误
    HTML
    App签名--- Android
    ToggleButton --------- 按钮实现开关效果
  • 原文地址:https://www.cnblogs.com/lichunke/p/9267760.html
Copyright © 2020-2023  润新知