zoukankan      html  css  js  c++  java
  • python基本数据类型及其使用方法

    前言

    ​ python中的数据类型主要为int、float、string、list、tuple、dict、set、bool、bytes。接下来int和float统称为数字类型。

    1.数据类型总结

    按存储空间的占用大小分(从低到高)

    数字
    字符串
    集合:无序,即无需存索引相关信息, 可变
    元组:有序,需要存索引相关信息,不可变
    列表:有序,需要存索引相关信息,可变,需要处理数据的增删改
    字典:无序,需要存key与value映射的相关信息,可变,需要处理数据的增删改
    

    按存值的个数区分

    数字,字符串      # 标量/原子类型
    列表,元组,字典,集合  # 容器类型
    

    按可变不可变类型区分

    列表,字典,集合         # 可变 -->不可hash     
    数字,字符串,元组  # 不可变-->可hash,不可变类型对象在自己的生命周期中内置有哈希值,所以可哈希的对象可以通过哈希值进行对比,也可以作为字典的键值和作为set函数的参数,可以使用__hash__()方法查看
    

    按访问顺序区分

    字典   # key值访问(映射类型)
    字符串,列表,元组  # 顺序访问(序列类型)
    

    2.数字类型

    #整型int
      作用:年纪,等级,身份证号,qq号等整型数字相关
      定义:
        age=10 #本质age=int(10)
        注意:使用int()进行强制类型转换时,如果对象不是纯数字,那么就会报错,比如int('11.11')
        
    #浮点型float
      作用:薪资,身高,体重,体质参数等浮点数相关
        
        salary=3000.3 #本质salary=float(3000.3)
    	注意:float强制类型转换时,float('11')--》11.0
    #整型、浮点型进行的运算(如果参与运算的元素有浮点型,那么结果肯定是浮点型)
    	print(8/3)  # 除  2.6666666666666665
        print(8/.2)  # 除  40.0
        print(8/0.2)  # 除  40.0
        print(8//5)  # 整除 1
        print(8.0//5)  # 整除 1.0
        print(8*3)  # 乘法  24
        print(8.0*3)  # 乘法  24.0
        print(2**3)  # 次方  8
        print(2.0**3)  # 次方  8.0	
        
    #二进制,十进制,八进制,十六进制 
    
    #长整形(了解)
        在python2中(python3中没有长整形的概念):      
        >>> num=2L
        >>> type(num)
        <type 'long'>
    
    #复数(了解)  
        >>> x=1-2j
        >>> x.real
        1.0
        >>> x.imag
        -2.0 
    

    3.字符串类型

    #作用:名字,性别,国籍,地址等描述信息
    
    #定义:在单引号双引号三引号内,由一串字符组成
    	name='sybil'
        name="sybil"
        name='''sybil'''
    
    #优先掌握的操作:
    #1、按索引取值(正向取+反向取) :只能取,索引不存在时会报错
    	s = 'abcd'
        s[0] --> 'a'
        s[-2] --> 'c'
        
    #2、切片(顾头不顾尾,步长)
    	s = '01234'
        s[0:3] --> '012'
        s[0:300] -> '01234'#索引溢出并不会报错,而是返回字符串最大长度的值
        #s[start:end:step] #start不写默认从头开始,end不写默认至到结束,setp默认为1,也可以是负数
        #字符串切片同列表切片类似,当步长为正数时,start<end才能取到值;步长为负数时,start>end才能取到值;注意,如果步长<0,当start不写时,表示在结束位置(@代表start位置: 01234@);end不写时,表示在头的位置。(@代表end位置: @01234)。(sybil的想法:实际上step<0时,将start和end的值调换,然后顾尾不顾头,之后反转即可)
        print(s[:])   # 01234
        print(s[0:3])   # 0123
        print(s[3:])   # 34
        print(s[3:3])   # ''
        print(s[3:1])   # ''
        
        print(s[0::-1])   # 0
        print(s[:0:-1])   # 4321
        print(s[:3:-1])   # 4
        print(s[:3:1])   # 012
        print(s[0:3:-1])  # ''
        print(s[3:0:-1])  # 321
        print(s[-4:0:-1])  # 1
        
    #3、长度len
    	s = 'abcd'
        len(s) #返回字符串的长度  4
        
    #4、成员运算in和not in
    	s = 'abcd'
        'a' in s --> True
        'a' not in s --> False
        
    #5、移除空白strip(默认是空白字符:换行、tab、空格等,可以一次指定去除多个字符)
    	s=' ab cd '
        s.strip() --> 'ab cd' #默认是过滤左右两边的空白字符,中间的无法去除  
        s = '* ab#cd *#'
        s.strip('* #') --> 'ab#cd' #可以指定多个要去除的字符,但同样只能去除左右两边的
        
    #6、切分split(默认是以空白字符切分,可以使用第二个参数指定切分的次数)
    	s = 'sybil:18:female'
        print(s.split(':'))  # ['sybil', '18', 'female']
        
        s1 = 'sybil:18:female'
        print(s.split(':', 1))  # ['sybil', '18:female']
        
        s2 = 'sybil 18 female'
        print(s2.split())  # ['sybil', '18', 'female']
        
    #7、循环
    	s = 'sybil'
        for item in s:
            print(i, end=' ')  # s y b i l
        
    #其余操作
    #1、lstrip,rstrip  使用同strip一样
    	s = '**sy bil*#'
        print(s.rstrip('*#'))  # **sy bil  只去除右边的字符
        print(s.lstrip('*'))  # sy bil*#   只去除左边的字符
        
    #2、lower,upper
    	s = 'Sybil66'
        print(s.upper())  # SYBIL66  将字符串中的字母全变为大写
        print(s.lower())  # sybil66  将字符串中的字母全变为小写
        
    #3、startswith,endswith
    	s = 'Sybil66'
        print(s.startswith('S'))  # True 判断字符串是否以S开头
        print(s.startswith('Sy'))  # True 判断字符串是否以Sy开头
        print(s.endswith('7'))  # False  判断字符串是否以7结束
        print(s.endswith('77'))  # False  判断字符串是否以77结束
    	
    #4、format的三种玩法
    	res='{} {} {}'.format('egon',18,'male') # egon 18 male
        res='{1} {0} {1}'.format('egon',18,'male')  # 18 egon 18
        # egon 18 male
        res='{name} {age} {sex}'.format(sex='male',name='egon',age=18) 
        
    #5、split,rsplit 使用同split一样
    	s = 'sybil:18:female'
        print(s.rsplit(':', 1))  # ['sybil:18', 'female']
        print(s.lsplit(':', 1))  # ['sybil', 18:female']
        
    #6、join  将列表中 的元素按指定字符拼接为字符串
    	res = ['sybil', '18', 'female']
        print('@'.join(res))  # sybil@18@female
        
    #7、replace  字符串中指定子序列替换为想要的元素
    	s = 'sybil:18:female'
        print(s.replace(':', '@'))  # sybil@18@female
    	print(s.replace(':', '@', 1))  # sybil@18:female
        
    #1、find,rfind,index,rindex,count  find同index最大的区别是index找不到会报错,而find是返回-1
    	s = 'onebyone'
        print(s.find('n'))    # 1
        print(s.find('z'))    # -1
        print(s.rfind('n'))   # 6
        print(s.index('n'))   # 1
        print(s.rindex('n'))  # 6
        print(s.count('n'))   # 2
    	
    #2、center,ljust,rjust,zfill
    	s = 'two'
        print(s.center(9, '*'))  # ***two***
        print(s.ljust(9, '*'))   # two******
        print(s.rjust(9, '*'))   # ******two
        print(s.zfill(9))        # 000000two
    	
    #3、expandtabs  将字符串的中tab制表符以空格显示,默认tabsize=8
    	s = 'moon	cake'
        print(len(s.expandtabs()))  # moon	cake
    
    #4、captalize,swapcase,title
    	s = 'moon cake'
        print(s.capitalize())  # Moon cake 首字母大写
        print(s.swapcase())    # MOON CAKE 大小写翻转
        print(s.title())       # Moon Cake 每个单词的首字母大写
        
    #5、is数字系列
    	#在python3中
        num1=b'4' #bytes
        num2=u'4' #unicode,python3中无需加u就是unicode
        num3='四' #中文数字
        num4='Ⅳ' #罗马数字
    
        #isdigt:bytes,unicode
        print(num1.isdigit()) #True
        print(num2.isdigit()) #True
        print(num3.isdigit()) #False
        print(num4.isdigit()) #False
    
        #isdecimal:uncicode
        #bytes类型无isdecimal方法
        print(num2.isdecimal()) #True
        print(num3.isdecimal()) #False
        print(num4.isdecimal()) #False
    
        #isnumberic:unicode,中文数字,罗马数字
        #bytes类型无isnumberic方法
        print(num2.isnumeric()) #True
        print(num3.isnumeric()) #True
        print(num4.isnumeric()) #True
    
        #三者不能判断浮点数
        num5='4.3'
        print(num5.isdigit())    # False
        print(num5.isdecimal())  # False
        print(num5.isnumeric())	 # False
        
    #6、is其他
    	name = 'sybil'
    	print(name.isalnum()) # True 判断字符串是否只包含字母或数字
        print(name.isalpha()) # True 判断字符串是否只包含字母
    
        print(name.isidentifier())  # True 判断变量名是否合法
        print(name.islower())  # True  判断字符串包含的字母是否都是小写
        print(name.isupper())  # False  判断字符串包含的字母是否都是大写
        print(name.isspace())  # False  判断字符串是否只由空格组成
        print(name.istitle())  # False  判断是否字符串中的每个单词首字母都是大写
        print('Go 23Ahead'.istitle())  # True
    

    4.列表

    #作用:多个装备,多个爱好,多门课程,多个女朋友等
    
    #定义:[]内可以有多个任意类型的值,逗号分隔
    fruit_list=['apple','pear'] #本质fruit_list=list([...])
    l=list('abc')  # ['a', 'b', 'c']
    # 使用list()时,相当于for循环将可迭代对象中的值依次取出append至一个列表
    l2=list({'x':1,'y':2,'z':3})  # ['x', 'y', 'z'] 
    
    #优先掌握的操作:
    #1、按索引存取值(正向存取+反向存取):即可存也可以取,索引不存在时报错
    	l = [0, 1, 2, 3, 4, 5]
        print(l[2])   # 2
        print(l[-4])  # 2
        l[0] = 6
        print(l)  # [6, 1, 2, 3, 4, 5]
        
    #2、切片(顾头不顾尾,步长),同字符串的切片方法一样
    	l = [0, 1, 2, 3, 4, 5]
        print(l[::-1])   # [5, 4, 3, 2, 1, 0]  列表翻转
        print(l[0:3])    # [0, 1, 2]
        print(l[0::-1])  # [0]
        print(l[0:4:2])  # [0, 2]
    	
    #3、长度
    	l = [0, 1, 2, 3, 4, 5]
        print(len(l))  # 6
        
    #4、成员运算in和not in
    	l = [0, 1]
        print(0 in l)  # True
        print(0 not in l)  # False
        
    #5、追加append  会将参数当做一个值来追加至列表的末尾
    	l = [0, 1]
        l.append(2)
        l.append('abc')
        l.append([3, 4])
        print(l)  # [0, 1, 2, 'abc', [3, 4]]
    
    #6、追加extend    
    	l = [1, 2]
        l.extend('34')  # 会将可迭代对象中的元素依次追加至列表末尾
        print(l)
        
    #7、删除  有三种方式:del remove pop    clear清空列表
    	l = [0, 1, 2]
        del l[0]  # 根据索引删除值,索引不存在时报错,且没有返回值
        print(l)  # [1, 2]
        
        l = [0, 1, 2, 'a']
        res = l.remove('a')  # 指定要删除的元素,不存在时报错
        print(res)  # 删除成功时返回None
        print(l)    # [0, 1, 2]
        
        l = [0, 1, 2, 'a']
        res = l.pop()  # 默认删除列表末尾的元素,并返回删除的值
        print(res, l)  # a [0, 1, 2]
        res2 = l.pop(0)  # 可以指定索引,索引不存在时报错
        print(res2, l)  # 0 [1, 2]
        
        l = [2, 1, 4]
        l.clear()  # 删除列表中所有元素,无返回值
        print(l)   # []
        
    #8、循环
    	l = [1, 2, 3, 4]
        for i in l:
            print(i, end=' ')  # 1 2 3 4
            
    #9、insert 指定索引前插入值
    	l = [1, 2]
        l.insert(0, 'a')  # ['a', 1, 2]
        print(l)
        l.insert(1, 'b')
        print(l)
        l.insert(-1, 'c')
        print(l)
    
    #10、reverse 翻转列表
    	l = [2, 1, 5]
        l.reverse()
        print(l)   # [5, 1, 2]
    
    #11、sort 排序
    	l = [2, 1, 5]
        l.sort()  #默认升序排序
        print(l)  # [1, 2, 5]
        l.sort(reverse=True)  #降序排序
        print(l)  # [5, 2, 1]
    
    #12、count 统计元素个数  index 返回元素索引,如果元素不存在则报错
    	l = [1, 2, 1, 2]
        print(l.count(2))  # 2
        print(l.index(2))  # 1
        # 使用index获取索引时,使用start, stop参数时,同列表的切片使用方法一样顾头不顾尾,如果该区间内不存在想获取的元素会报错
        print(l.index(2, 0, 2))  # 1
      
    #13、copy 复制列表,不过只是值复制
    	l = [1, 2, 3]
    l2 = l.copy()
    print(l2)  # [1, 2, 3]
    print(l == l2) # True 这意味它们其实是同一个列表
    

    5.元组

    
    #作用:存多个值,对比列表来说,元组不可变(是可以当做字典的key的),主要是用来读
    
    #定义:与列表类型比,只不过[]换成()
    age=(11,22,33,44,55)本质age=tuple((11,22,33,44,55))
    t1 = tuple('hello') # ('h', 'e', 'l', 'l', 'o')
    
    #优先掌握的操作(下列方法同列表的一样,此处不描述):
    #1、按索引取值(正向取+反向取):只能取   
    #2、切片(顾头不顾尾,步长)
    #3、长度
    #4、成员运算in和not in
    #5、循环
    #6、count 统计元素个数  index 返回元素索引,如果元素不存在则报错
    
    
    # 注意
    #1、如果元组只有一个元素时,一定要加个逗号
    	t = (4)
        t2 = (4, )
        print(t, type(t))  # 4 <class 'int'>
        print(t2, type(t2))  # (4,) <class 'tuple'>
        
    #2、元组是不可变类型,改变他的元素时会报错,但是可以修改元素的元素
    	t = (1, [1, 2], 'a')
        t[1][0] = '@'
        print(t)  # (1, ['@', 2], 'a')
    
    

    6.字典

    #作用:存多个值,key-value存取,取值速度快
    
    #定义:key必须是不可变类型,value可以是任意类型
    info={'name':'egon','age':18,'sex':'male'} #本质info=dict({....})
    或
    info=dict(name='egon',age=18,sex='male')
    或
    info=dict([['name','egon'],('age',18)])
    
    #优先掌握的操作:
    #1、按key存取值:可存可取
    	dic = {'name': 'sybil', 'skill': 'fly'}
        print(dic['name'])  # 'sybil'
        dic['skill'] = 'magic'
        print(dic)  # {'name': 'sybil', 'skill': 'magic'}
        
        #字典可以使用get方法取值,如果key不存在不会报错,默认是返回None,可以自定义
        dic = {'name': 'sybil', 'skill': 'fly'}
        print(dic.get('age', '该Key不存在'))  # 该Key不存在
        dic['age']  # 直接报错
    
    #2、长度len  返回字典中键值对的个数
    	dic = {'name': 'sybil', 'skill': 'fly'}
        print(len(dic))  # 2
        
    #3、成员运算in和not in  判断的都是key
    	dic = {'name': 'sybil', 'skill': 'fly'}
        print('name' in dic)  # True
        print('fly' in dic)   # False
        
    #4、删除 del pop popitem
    	dic = {'name': 'sybil', 'skill': 'fly'}
        
        del dic['skill']  # key不存在时会报错,没有返回值,企图print时会报语法错误
        print(dic)  # {'name': 'sybil'}
        
        #pop删除key对应的value,并返回value,key不存在时报错
        print(dic.pop('name'))  # 'sybil'
    	print(dic)  # {'skill': 'fly'}
        
        # popitem随机删除一个键值对,并返回该键值对元组,如果字典为空时使用则报错
        print(dic.popitem())  # ('skill', 'fly')
        print(dic)  # {'name': 'sybil'}
    
    #5、键keys(),值values(),键值对items(),得到的结果是字典的一些对象,可以使用list强转或者for循环取值等
    	dic = {'name': 'sybil', 'skill': 'fly'}
        print(dic.keys())    # dict_keys(['name', 'skill'])
        print(dic.values())  # dict_values(['sybil', 'fly'])
        print(dic.items())   # dict_items([('name', 'sybil'), ('skill', 'fly')])
        
    #6、循环 默认就是取字典的key
    	dic = {'name': 'sybil', 'skill': 'fly'}
        for k in dic:
            print(k, end=' ')  # name skill 
        
    #7、fromkeys 创建一个字典,第一个参数是可迭代对象,其中的的元素作为字典的key,第二个参数是所有key对应的value。
    	dic = {}
        s = 'ab'
        dic = dic.fromkeys(s, 1)
        print(dic)  # {'a': 1, 'b': 1}
        
        #如果fromkeys第二个参数是可变类型:比如说列表,
    	#那么所有key对应的value的内存地址都一样,即共用一个列表,一个变全都变
        dic = {}
        l = ['name', 'skill']
        dic = dic.fromkeys(l, [])
        print(dic)  # {'name': [], 'skill': []}
        dic['name'].append('sybil')
        print(dic)  # {'name': ['sybil'], 'skill': ['sybil']}
        
    #8、update与setdefault,更新字典,参数可以是字典或者是可以解压赋值出两个值的可迭代对象如:[['name', 'cc'], ['age', 18]]
    	#update 如果Key存在则修改对应的value,如果不存在则增加对应的key:value
        dic = {'name': 'sybil', 'skill': 'fly'}
        new_dic = {'name': 'cc', 'age': 18}
        dic.update(new_dic)
        print(dic)  # {'name': 'cc', 'skill': 'fly', 'age': 18}
        
        # setfault 如果key存在则不进行任何操作,否则增加key:value,两种情况下都会返回key对应的value
        dic = {'name': 'sybil', 'skill': 'fly'}
        print(dic.setdefault('name', 'cc'))  # sybil
        print(dic)  # {'name': 'sybil', 'skill': 'fly'}
    
        print(dic.setdefault('age', '18'))  # 18
        print(dic)  # {'name': 'sybil', 'skill': 'fly', 'age': '18'}
    
    

    7.集合

    #作用:去重,关系运算,
    
    #定义集合:
                集合:在{}内用逗号分隔开的多个值
                集合的元素遵循三个原则:
                 1:每个元素必须是不可变类型(可hash,可作为字典的key)
                 2: 没有重复的元素
                 3:无序
    
    注意集合的目的是将不同的值存放到一起,不同的集合间用来做关系运算,无需纠结于集合中单个值
    
    #优先掌握的操作:
    #1、长度len
    	s = {'a', 'b', 'c'}
        print(len(s))  # 3
        
    #2、成员运算in和not in
    	s = {'a', 'b', 'c'}
        print('a' in s)  # True
        print('a' not in s)  # False
        
    #3、|合集
    	pythons = {'x', 'y', 'z'}
        linux = {'x', 'y', 'a'}
        print(pythons | linux)  # {'a', 'z', 'y', 'x'}
        
    #4、&交集
    	pythons = {'x', 'y', 'z'}
        linux = {'x', 'y', 'a'}
        print(pythons & linux)  # {'y', 'x'}
    
    #5、-差集
    	pythons = {'x', 'y', 'z'}
        linux = {'x', 'y', 'a'}
        print(pythons - linux)  # {'z'}
        print(linux - pythons)  # {'a'}
    
    #6、^对称差集
    	pythons = {'x', 'y', 'z'}
        linux = {'x', 'y', 'a'}
        print(pythons ^ linux)  # {'z', 'a'}
    
    #7、==
    	s1 = {1, 2}
        s2 = {2, 1}
        print(s1 == s2)  # True
        
    #8、父集:>,>= 
    	s1 = {1, 2, 3}
        s2 = {2, 1}
        print(s1 > s2)  # True  s1是s2的子集
        
    #9、子集:<,<=  
    	s1 = {1, 2, 3}
        s2 = {2, 1}
        print(s2 < s1)  # True
        print(s1 <= s2)  # False
     
    #10、add与update 
    	s = {1, 2}
        s.add(3)
        s.add(('a', 'b'))  #类似列表的append方法,不过插入位置不定,因为是无序的
        print(s)  # {1, 2, 3, ('a', 'b')}
        s.update('45')  #类似列表的extend方法,可迭代对象中的元素必须是不可变类型,否则会报错
        print(s)  # {1, 2, 3, '4', '5', ('a', 'b')}
        
    #11、删除集合的值 pop remove discard
    	# pop 随机删除集合的一个值,并返回该值,如果集合为空则报错
            s = {1, 2, 3}
            print(s.pop())  # 1
            print(s)  # {2, 3}
        
        # remove 单纯的删除,返回值为None,值不存在会报错
        	s = {1, 2}
            print(s.remove(1))  # None
            print(s)  # {2}	
           
        # discard 删除值,返回值为None,如果值不存在也是返回None
        	s = {1, 2}
            print(s.discard(1))  # None
            print(s.discard(4))  # 值不存在时返回None
            print(s)  # {2}
    
  • 相关阅读:
    线程池原理分析(一)-线程池体系结构
    LinkedBlockingQueue原理分析
    ArrayBlockingQueue原理分析(二)-迭代器
    ArrayBlockingQueue原理分析(一)
    ConcurrentHashMap原理分析(二)-扩容
    ConcurrentHashMap原理分析(一)-综述
    CyclicBarrier原理分析
    Jmeter集合点技术
    Jmeter关联技术
    JMeter参数化
  • 原文地址:https://www.cnblogs.com/maoruqiang/p/11408904.html
Copyright © 2011-2022 走看看