第五章 python数据类型及内置方法

python基本数据类型及内置方法

一、int类型

age = 18 # age = int(18)

  • 类型转换:
    纯数字的字符串转换成整型:
    res = int('111000222')
    print(res,type(res))

  • 10进制转换二进制、八进制及十六进制
    # 10进制 -> 二进制
    # 11 - > 1011
    # 1011-> 8+2+1
    # print(bin(11)) # 0b1011

    10进制 -> 八进制

    print(oct(11)) # 0o13

    10进制 -> 十六进制

    print(hex(11)) # 0xb

    print(hex(123)) # 0xb

  • 其他进制之间的转换
    # 二进制->10进制
    # print(int('0b1011',2)) # 11

    二进制->8进制

    print(int('0o13',8)) # 11

    二进制->16进制

    print(int('0xb',16)) # 11

二、float类型

res = float("5.5")

print(res,type(res))

总结:int与float的使用就是针对数学运算+比较运算

三、str类型

msg='hello world' # msg=str('msg')

print(msg,type(msg))

  • 类型转换:
    # str可以把任意其他类型都转成字符串
    # res=str({'a':1})
    # print(res,type(res))

  • 内置方法:
    # (1)索引取值,支持正向取值,反向取值,不能修改值
    msg = 'hello python'
    print(msg[4])
    print(msg[-1])

    (2)切片:索引的拓展应用,从一个大字符串中拷贝出一个子字符串

    msg = 'hello world'
    # 顾头不顾尾(左闭右开原则),支持步长
    res=msg[0:5]
    print(res) # hello
    print(msg) # hello world

    res = msg[0:5:2] # 相当于获取了下标分别为0 2 4的数据
    print(res) # hlo

    res=msg[::-1] # 把字符串倒过来
    print(res)

    (3)获取字符串长度len()

    msg = 'hello world'
    print(len(msg))

    (4)成员运算in和not in

    判断一个子字符串是否存在于一个大字符串中

    print("a" in "abc is str")
    print("bmw" not in "car")

    (5)移除字符串左右两侧的符号strip,默认去掉空格

    msg=' hello '
    res = msg.strip()
    print(msg) # 不会改变原值
    print(res) # 是产生了新值
    # 拓展:lstrip,rstrip,原理同strip,lstrip消除左边字符,rstrip消除右边字符,默认去掉空格

    (6)切分split:把一个字符串按照某种分隔符进行切分,得到一个列表,默认分隔符是空格

    info = 'wcg 18 male'
    res = info.split()
    print(res)
    # 拓展:rsplit 切割字符串从右开始切,得到一个列表,默认分隔符是空格

    指定分隔符

    info = 'wcg:18:male'
    res = info.split('😂
    print(res)

    指定分隔次数(了解)

    info = 'wcg:18:male'
    res = info.split(':',1)
    print(res)

    (7)字符串循环取值的问题

    msg = 'i am lucy'
    for i in msg:
    print(i)

    (8)大小写转换(lower,upper)

    msg = 'AbbbCCCC'
    print(msg.lower())
    print(msg.upper())

    (9)判断是否以指定字符开头/结尾(startswith,endswith),返回值True/False

    print("dog is animal".startswith("dog"))
    print("dog is animal".endswith('is'))

    (10)把列表拼接成字符串(join)

    ''.join(['my','name','is','lucy'])

    (11)替换指定字符串(replace),可以指定替换个数,默认全部替换

    msg = "you can you up no can no bb"
    print(msg.replace("you","YOU",))
    print(msg.replace("you","YOU",1))

    (12)判断字符串是否由纯数字组成(isdigit)

    print('123'.isdigit())
    print('12.3'.isdigit())

    (13)is其他系列

    print('abc'.islower())
    print('ABC'.isupper())
    print('Hello World'.istitle())
    print('123123aadsf'.isalnum()) # 字符串由字母或数字组成结果为True
    print('ad'.isalpha()) # 字符串由由字母组成结果为True
    print(' '.isspace()) # 字符串由空格组成结果为True
    print('print'.isidentifier())
    print('age_of_allen'.isidentifier())

    (14)查找指定的字符串系列(find,index),其中find找不到会返回-1,index找不到则抛出异常

    msg='hello allen hahaha'
    # 找到返回起始索引
    print(msg.find('e')) # 返回要查找的字符串在大字符串中的起始索引
    print(msg.find('al'))
    print(msg.index('e'))

    找不到时二者的区别

    print(msg.find('xxx')) # 返回-1,代表找不到
    print(msg.index('xxx')) # 抛出异常

    (15)计算统计次数(count)

    msg = 'hello aaa hahaha aaa、 aaa'
    print(msg.count('aaa'))

    (16)打印指定长度字符串(center,ljust,rjust,zfill)

    print('wcg'.center(50,'')) # 字符串总长度50,wcg居中显示
    print('wcg'.ljust(50,'
    ')) # 字符串总长度50,wcg靠左显示
    print('wcg'.rjust(50,'*')) # 字符串总长度50,wcg靠右显示
    print('wcg'.zfill(10)) # 字符串总长度10,wcg靠右显示,左边字符用0填充

    (17)首字母大写captalize,大小写翻转swapcase,每个单词都首字母大写title

    print("hello world wcG".capitalize())
    print("Hello WorLd ALlEn".swapcase())
    print("hello world wcg".title())

    (18)设定制表符(expandtabs)

    msg='hello\tworld'
    print(msg.expandtabs(2)) # 设置制表符代表的空格数为2

四、list类型

按位置存放多个值,以下标为key取值,下标从0开始

lst = ['abc',123,(1,5,7)] # lst = list( ['abc',123,(1,5,7)] )

print(lst[2],type(lst))

  • 类型转换: 但凡能够被for循环遍历的类型都可以当做参数传给list()转成列表
    res=list('hello')
    print(res)
    res=list({'k1':111,'k2':222,'k3':3333})
    print(res)

  • 内置方法
    # (1)按索引存取值(正向存取+反向存取):即可以取也可以改
    l=[111,'wcg','hello']
    # 正向取
    print(l[0])
    # 反向取
    print(l[-1])
    # 可以取也可以改:索引存在则修改对应的值
    l[0]=222
    print(l)
    # 无论是取值操作还是赋值操作:索引不存在则报错
    l[3]=333

    (2)切片(顾头不顾尾,步长)

    原理同字符串切片操作

    (3)获取长度(len)

    lst = [1,2,3,4]
    print(len(lst))

    (4)成员运算in和not in

    print('aaa' in ['aaa', 1, 2])
    print(1 in ['aaa', 1, 2])

    (5)往列表添加值(append,insert,extend)

    在列表后面追加值

    l = [111,'wcg','hello']
    l.append(3333)
    l.append(4444)
    print(l)

    根据索引位置插入值

    l = [111,'wcg','hello']
    l.insert(0,'lucy')
    print(l)

    extend添加值

    new_l = [1,2,3]
    l = [111,'556','hello']
    l.append(new_l)
    print(l)

    (6)删除

    方式一:通用的删除方法,只是单纯的删除、没有返回值

    l = [111, '998', 'hello']
    del l[1]
    x = del l[1] # 抛出异常,不支持赋值语法
    print(l)

    方式二:l.pop()根据索引删除,会返回删除的值

    l = [111, 'oop', 'hello']
    l.pop() # 不指定索引默认删除最后一个
    l.pop()
    print(l)

    res = l.pop(1)
    print(l)
    print(res)

    方式三:l.remove()根据元素删除,返回None

    l = [111, '889', [1,2,3],'hello']
    l.remove([1,2,3])
    print(l)
    res=l.remove('hello')
    print(res) # None

    (7)循环

    l = [1,'aaa','bbb']
    for x in l:
    l.pop(1)
    print(x)

    (8)统计(count)

    l = [1, 'aaa', 'bbb','aaa','aaa']
    l.count()
    print(l.count('aaa'))

    (9)查找(index)

    l = [1, 'aaa', 'bbb','aaa','aaa']
    print(l.index('aaa'))
    print(l.index('aaaaaaaaa')) # 找不到报错

    (10)清空列表(clear)

    l = [1, 'aaa', 'bbb','aaa','aaa']
    l.clear()
    print(l)

    (11)列表翻转(reverse)

    注意:不是排序,就是将列表倒过来

    l = [1, 'aaa','bbb','ccc']
    l.reverse()
    print(l))

    (12)排序(sort)

    列表内元素必须是同种类型才可以排序

    l = [11,-3,9,2,3.1]
    l.sort() # 默认从小到大排,称之为升序
    l.sort(reverse=True) # 从大到小排,设置为降序
    print(l)

    拓展:

    字符串可以比大小,按照对应的位置的字符依次pk

    字符串的大小是按照ASCI码表的先后顺序加以区别,表中排在后面的字符大于前面的

    print('a'>'b')
    print('abz'>'abcdefg')

    了解:列表也可以比大小,原理同字符串一样,但是对应位置的元素必须是同种类型

    l1 = [1,'abc','zaa']
    l2 = [1,'abc','zb']
    print(l1 < l2)

  • 利用列表模拟队列和堆栈效果
    # 1、队列:FIFO,先进先出
    l = []
    # # 入队操作
    l.append('first')
    l.append('second')
    l.append('third')

    出队操作

    print(l.pop(0))
    print(l.pop(0))
    print(l.pop(0))

    2、堆栈:LIFO,后进先出

    l = []
    # 入栈操作
    l.append('first')
    l.append('second')
    l.append('third')

    出队操作

    print(l.pop())
    print(l.pop())
    print(l.pop())

五、tuple类型

元组就是"一个不可变的列表"

作用:按照索引/位置存放多个值,只用于读不用于改

定义:()内用逗号分隔开多个任意类型的元素

t=(1,1.3,'aa') # t=tuple((1,1.3,'aa'))

print(t,type(t))

重点1:如果元组中只有一个元素,必须加逗号

t = (10,) # 如果元组中只有一个元素,必须加逗号
print(t,type(t))

重点2:元祖中按照下标存放的数据只能读不能修改,如果该下标对应的值是可变类型,那么可以修改该下标对应的可变类型中的值

t = (1,'aaa',[1,2,3])
t[0] = 888 # 不可以修改
t[2][0] = '1' # 可以修改

  • 类型转换
    print(tuple('hello'))
    print(tuple([1,2,3]))
    print(tuple({'a1':111,'a2':333}))

  • 内置方法
    # (1)按索引取值(正向取+反向取):只能取
    t=('aa','bbb','cc')
    print(t[0])
    print(t[-1])

    (2)切片(顾头不顾尾,步长)

    t=('aa','bbb','cc','dd','eee')
    print(t[0:3])
    print(t[::-1])

    (3)长度

    t=('aa','bbb','cc','dd','eee')
    print(len(t))

    (4)成员运算in和not in

    print('aa' in t)

    (5)循环

    for x in t:
    print(x)

    (6)查找

    t=(2,3,111,111,111,111)
    print(t.index(111))
    print(t.index(1111111111))

    (7)统计次数

    print(t.count(111))
    六、dict类型
    {}内用逗号分隔开多个key:value,其中value可以使任意类型,但是
    key必须是不可变类型,且不能重复
    创建字典的两种方式:
    # (1)方式一:
    d = {'k1':111,(1,2,3):222} # d=dict(...)
    print(d['k1'])
    print(d[(1,2,3)])
    print(type(d))

    d={} # 默认定义出来的是空字典
    print(d,type(d))

    (2)方式二:

    d = dict(x=1,y=2,z=3)
    print(d,type(d))

    (3)方式三:

    info=[
    ['name','wcg'],
    ('age',18),
    ['gender','male']
    ]
    res=dict(info) # 一行代码搞定上述for循环的工作
    print(res)

    (4)方式四:快速初始化一个字典

    keys = ['name','age','gender']
    d = {}
    for k in keys:
    d[k] = None
    print(d)
    d = {}.fromkeys(keys,None) # 一行代码搞定上述for循环的工作
    print(d)

  • 内置方法
    # (1)按key存取值:可存可取
    d = {'k1':111}
    # 针对赋值操作:key存在,则修改
    d['k1']=222
    # 针对赋值操作:key不存在,则创建新值
    d['k2']=3333
    print(d)

    (2)获取长度(len)

    d = {'k1':111,'k2':2222,'k1':3333,'k1':4444}
    print(d)
    print(len(d))

    (3)成员运算in和not in:根据key

    d = {'k1':111,'k2':2222}
    print('k1' in d)
    print(111 in d)

    (4)删除方法

    d={'k1':111,'k2':2222}

    通用删除

    del d['k1']
    print(d)

    pop删除:根据key删除元素,返回删除key对应的那个value值

    res = d.pop('k2')

    print(d)

    print(res)

    popitem删除:随机删除,返回元组(删除的key,删除的value)

    res = d.popitem()

    print(d)

    print(res)

    (5)获取键keys(),值values(),键值对items()

    d = {'k1':111,'k2':2222}
    d.keys()
    d.values()
    d.items()

    (6)for循环

    for k in d.keys():
    print(k)

    for k in d:
    print(k)

    for v in d.values():
    print(v)

    for k,v in d.items():
    print(k,v)

    print(list(d.keys()))
    print(list(d.values()))
    print(list(d.items()))

    (7)清空操作(clear)

    d = {'k1':111}
    d.clear()

    (8)更新操作(update)

    d.update({'k2':222,'k3':333,'k1':111111111111111})
    print(d)

    (9)根据key取值另一种方法(get)

    d.get() :根据key取值,容错性好

    print(d['k2']) # key不存在则报错
    print(d.get('k1')) # 111
    print(d.get('k2')) # key不存在不报错,返回None

    (10)设置默认值(setdefault)

    如果key有则不添加,返回字典中key对应的值

    info = {'name':'wcg'}
    res = info.setdefault('name','lucy')
    print(info)
    print(res)

    如果key没有则添加,返回字典中key对应的值

    info={}
    res=info.setdefault('name','lucy')
    print(info)
    print(res)

六、set类型

"""
在{}内用逗号分隔开多个元素,多个元素满足以下三个条件
1. 集合内元素必须为不可变类型
2. 集合内元素无序
3. 集合内元素没有重复
"""

s = {1,[1,2]} # 集合内元素必须为不可变类型
s = {1,'a','z','b',4,7} # 集合内元素无序
s = {1,1,1,1,1,1,'a','b'} # 集合内元素没有重复
print(s)

  • 类型转换
    set({1,2,3})
    res = set('helloworld')
    print(res)
    print(set([1,1,1,1,1,1,[11,222]]) # 报错,必须为不可变类型

  • 内置方法
    friends1 = {"lucy","kevin","jack","wcg"}
    friends2 =

    (1)取交集:两者共同的好友

    res = friends1 & friends2
    print(res)
    print(friends1.intersection(friends2))

    (2)取并集/合集:两者所有的好友

    print(friends1 | friends2)
    print(friends1.union(friends2))

    (3)取差集:取friends1独有的好友

    print(friends1 - friends2)
    print(friends1.difference(friends2))

    取friends2独有的好友

    print(friends2 - friends1)
    print(friends2.difference(friends1))

    (4)对称差集: 求两个用户独有的好友们(即去掉共有的好友)

    print(friends1 ^ friends2)
    print(friends1.symmetric_difference(friends2))

    4.5 父子集:包含的关系

    s1 = {1,2,3}
    s2 = {1,2,4}
    # 不存在包含关系,下面比较均为False
    print(s1 > s2)
    print(s1 < s2)

    s1 = {1,2,3}
    s2 = {1,2}
    print(s1 > s2) # 当s1大于或等于s2时,才能说是s1是s2父级
    print(s1.issuperset(s2))
    print(s2.issubset(s1)) # s2 < s2 =>True

    s1 = {1,2,3}
    s2 = {1,2,3}
    print(s1 == s2) # s1与s2互为父子
    print(s1.issuperset(s2))
    print(s2.issuperset(s1))

    =去重=

    (1)只能针对不可变类型去重

    print(set([1,1,1,1,2]))

    (2)无法保证原来的顺序

    l = [1,'a','b','z',1,1,1,2]
    l = list(set(l))
    print(l)

    其他内置方法

    (1)删除(discard,remove)

    s = {1,2,3}
    s.discard(4) # 删除元素不存在do nothing
    print(s)
    s.remove(4) # 删除元素不存在则报错

    (2)其他内置方法update、pop、add

    s.update({1,3,5})
    print(s)

    res = s.pop()
    print(res)

    s.add(4)
    print(s)

posted @ 2020-04-29 15:12  一切随心走_水瓶  阅读(129)  评论(0)    收藏  举报