• 基本数据类型的内置方法


    一 int 类型

    ​ 1、作用

    ​ 2、定义

    ​ int( ) :调用创建整型数据功能

    age=10  # 本质age = int(10)
    

    补充:

    res = print(‘xxx’)  #print不生产产品
    print(res) #None  
    

    ​ 3、类型转换

    ​ 3.1 出数字的字符串转成 int

    int('1010') #1010
    

    ​ 3.2 了解

    ​ 十进制 ——>二进制

    print(bin(11)) #0b1011
    

    ​ 十进制——>八进制

    print(oct(11)) # 0o13
    

    ​ 十进制——>十六进制

    print(hex(11)) # 0xb
    print(hex(123)) # 0x7b
    

    ​ 二进制——>十进制

    print(int('0b1011',2)) # 11
    

    ​ 八进制——>十进制

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

    ​ 十六进制——>十进制

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

    二 float 类型

    ​ 1、作用

    ​ 2、定义

    ​ float():调用创建浮点型数据的功能

    salary=1.1  # 本质salary=float(1.1)
    

    ​ 3、类型转换

    res=float("3.1")
    print(res,type(res)) #3.1 <class 'float'>
    

    ​ 4、使用:

    ​ 使用的就是数学运算 + 比较运算

    三 字符串类型

    1、作用

    ​ 用于记录一些描述性的信息。

    字符串是一个值,它是有序的(有索引),不可变类型。

    ​ 有虚类型=>序列类型

    字符串的修改操作都是在原字符串的基础上新建一个字符串,并不是直接对原字符串进行修改

    2、定义

    ​ 字符串定义:在单引号/双引号/三引号内包含一串字符

    ​ 只要在引号内,空格也算字符

    name1 = 'han'  # 本质:name = str('任意形式内容')
    name2 = "zhang"  # 本质:name = str("任意形式内容")
    name3 = """kang"""  # 本质:name = str("""任意形式内容""")
    

    3、类型转换

    ​ str可以把任意其他类型都转为字符串

    res=str({'a':1})
    print(res,type(res)) #{'a': 1} <class 'str'>
    

    4、使用:内置方法

    4.1 按索引取值(正向取+反向取):只能取(不能改

    ​ 通过索引不能修改字符串

    msg='hello world'
    # 正向取
    print(msg[0]) #h
    print(msg[4]) #o
    # 反向取
    print(msg[-1]) #d
    msg[0] = H
    print(msg) #报错, 不能通过索引改
    

    4.2 切片:索引的扩展应用,从一个大字符串中拷贝出一个子字符串(顾头不顾尾,步长)

    msg = 'hello world'
    print(msg[0:4]) #hell
    print(msg[0:5:2]) #hlo
    print(msg[-1]) #d
    print(msg[:]) #hello world 正着取所有
    print(msg[0: -1]) #hello worl
    print(msg[4:0:-1]) #olle
    print(msg[4:0:-2]) #ol
    print(msg[::-1]) #dlrow olleh 倒着取所有
    

    4.3 统计长度 len

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

    4.4 成员运算 in 和 not in

    ​ 判断一个子字符串是否在一个大字符串里

    print("alex" in "alex is sb")  #True
    print("alex" not in "alex is sb") #False
    print(not "alex" in "alex is sb") # False
    

    4.5 移除字符串左右两侧的符号 strip

    ​ 如果想要去掉字符串中所有符号 即 ’字符串‘.strip(’添加想要去掉的符号‘)

    msg='**/*=-**egon**-=()**'
    print(msg.strip('*/-=()'))  #egon
    

    ​ 默认去掉两侧的空格

    # msg='      egon      '
    # res=msg.strip()
    # print(msg) # 不会改变原值
    # print(res) # 是产生了新值
    

    ​ 了解:strip 之去掉两边,不能去掉中间

    msg='****egon****'
    print(msg.strip('*')) #egon
    msg1='****e*****gon****'
    print(msg1.strip('*')) #e*****gon				
    

    ​ strip lstrip rstrip比较

    ​ strip:去掉左右两侧的符号

    ​ lstrip:去掉左侧的符号

    ​ rstrip:去掉右侧的符号

    msg='***egon****'
    print(msg.strip('*')) #egon
    print(msg.lstrip('*')) #egon****
    print(msg.rstrip('*')) #***egon
    

    4.6 切分 split

    ​ 切分:把一个字符串按照某种分隔符进行切分,得到一个列表

    ​ 1)默认分隔符是空格

    info='egon 18 male'
    res=info.split()
    print(res) #['egon', '18', 'male']
    

    ​ 2)指定分隔符

    info='egon:18:male'
    res=info.split(':')
    print(res) #['egon', '18', 'male']
    

    ​ 3)指定分隔次数

    info='egon:18:male'
    res=info.split(':',1)
    print(res) #['egon', '18:male']
    

    ​ 4)split 与 rsplit比较

    ​ split :从左切

    ​ rsplit : 从右切

    info="egon:18:male"
    print(info.split(':',1)) # ["egon","18:male"]
    print(info.rsplit(':',1)) # ["egon:18","male"]
    
    

    ​ 循环

    info='egon:18:male'
    for x in info:
        print(x)
    
    

    ​ 结果展示:

    e g o n : 1 8 : m a l e
    
    
     	**4.7  lower  upper**
    
    msg='AbbbCCCC'
    print(msg.lower()) #abbbcccc 全改为小写
    print(msg.upper()) #ABBBCCCC	全改为大写
    
    

    4.8 startswith endwith

    print("alex is sb".startswith("alex")) #True
    print("alex is sb".endswith('sb'))  #True
    
    

    4.9 format

    cmd = input('请输入命令:').strip()
    print('{}正在执行。。。'.format(cmd))
    
    

    4.10 join:把列表(元素全为字符串的)拼接成字符串

    ​ 按照某个分隔符号,把元素全为字符串的列表拼接成一个大字符串

    l = ['egon', '18', 'male']
    res =":".join(l) # 按照某个分隔符号,把元素全为字符串的列表拼接成一个大字符串
    print(res) #egon:18:male
    
    

    ​ 注:如果列表中有元素不是字符串的话,拼接会报错

    l1=[1,"2",'aaa']
    res = ":".join(l1)
    print(res) #报错
    
    

    4.11 替换 replace

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

    4.12 isdigit

    ​ 判断字符串是否由纯数字组成

    ​ 只能识别 bytes(如:b'4') 及 unicode(如:u'4') 类型数字

    print('123'.isdigit()) #True
    print('12.3'.isdigit()) #False
    
    

    ​ 补充:

    num1=b'4' #bytes
    num2=u'4' #unicode,python3中无需加u就是unicode
    num3='四' #中文数字
    num4='Ⅳ' #罗马数字
    
    # isdigit只能识别:num1、num2
    print(num1.isdigit()) # True
    print(num2.isdigit()) # True
    print(num3.isdigit()) # False
    print(num4.isdigit()) # False
    
    # isnumberic可以识别:num2、num3、num4
    print(num2.isnumeric()) # True
    print(num3.isnumeric()) # True
    print(num4.isnumeric()) # True
    
    # isdecimal只能识别:num2
    print(num2.isdecimal()) # True
    print(num3.isdecimal()) # False
    print(num4.isdecimal()) # False
    
    

    4.13 find rfind index rindex

    ​ 1)find(' 字符串'): 返回要查找的字符串在大字符串中的起始索引,如果没有,则会返回 -1

    ​ 2)rfind(' 字符串'): 返回要查找(从右开始查找)的字符串在大字符串中的起始索引

    ​ 3)index('字符串’):返回要查找的字符串在大字符串中的起始索引,如果没有会报错

    ​ 4)rindex('字符串'): 返回要查找(从右开始查找)的字符串在大字符串中的起始索引

    msg='hello egon hahaha'
    print(msg.find('e')) #1 返回要查找的字符串在大字符串中的起始索引
    print(msg.find('egon')) #6
    print(msg.index('e')) #1 
    print(msg.index('egon')) #6
    print(msg.find('xxx')) #返-1 代表找不到
    print(msg.index('xxx')) #找不到,报错
    
    
    **4.14 count** 
    

    ​ count:查找字符串在整个大的字符串中的个数

    msg='hello egon hahaha egon、 egon'
    print(msg.count('egon')) #3
    
    
     **4.15 center,ljust,rjust,zfill**
    
    #总宽度为20,字符串居中,不够用 * 补全
    print('egon'.center(20,'*')) #********egon********
    #总宽度为50,字符串居左,不够用 * 补全
    print('egon'.ljust(20,'*')) #egon****************
    #总宽度为50,字符串居右,不够用 * 补全
    print('egon'.rjust(20,'*')) #****************egon
    #总宽度为 10,字符串居右,
    print('egon'.zfill(10)) #000000egon
    
    

    4.16 captalize,swapcase,title

    #captalize:首字母大写
    print('hello world egon'.capitalize()) #Hello world egon
    #swapcase:大小写翻转
    print('Hello WorLd EGon'.swapcase())#hELLO wORlD egON
    # title:每个单词的首字母大写
    print('hello world egon'.title()) #Hello World Egon
    
    

    4.17 is的用法

    #isupper 判断是否为大写
    print('abc'.isupper()) #False
    #islower 判断是否为小写
    print('abc'.islower()) #True
    #istitle 判断字符串的单词首字母是否为大写
    print('Hello World'.istitle()) #True
    #isalnum():判断是否由数字,字母或者数字加字母组成
    print('123aab'.isalnum()) #True
    print('123'.isalnum()) #True
    print('abc'.isalnum()) #True
    print('123#abc'.isalnum())#False
    #isalpha 判断是否全为字母
    print('abc'.isalpha())  #True
    print('abc1'.isalpha())  #False
    #isspace 判断字符串是否全为空格
    print('  '.isspace())   #True
    print('ab  '.isspace()) #False
    #isidentifier 判断字符串命名是否规范
    print('print'.isidentifier())  #True  python
    print('age_of_egon'.isidentifier()) #True
    print('1age_of_egon'.isidentifier()) #False
    
    

    4.18 expandtabs

    ​ expandtabs() 方法把字符串中的 tab 符号(' ')转为空格,tab 符号(' ')默认的空格数是 8。

    ​ 默认以 8 个空格数为一个 制表符

    name ='tony	hello'  
    msg ='hlelo	world'
    awp = 'withswitch'
    
    # 设置制表符代表的空格数,默认为 8
    print(msg)  #hello	world 用3个空格扩展
    print(awp.expandtabs(4))#withswitch 没有扩展
    print(name.expandtabs(1)) #tony hello 用一个空格扩展
    print(name.expandtabs(2)) #tony  hello 用两个空格扩展
    print(name.expandtabs(3)) #tony  hello 用两个空格扩展
    print(name.expandtabs(4)) #tony    hello 用四个空格扩展
    print(name.expandtabs(5))#tony hello 用一个空格扩展
    
    

    四 列表

    1、作用

    ​ 按位置存多个值,一般用于存同种类型

    列表是有序的,可变类型 存多个值

    2、定义

    list1 = [1, 1.2, 'a']   #list1= list([1, 1.2, 'a'] )				 
    
    

    3、类型转换

    但凡能够被 for 循环遍历的类型都可以当做参数传给 list( )转成列表

    lsit( )底层就相当于调用了一个 for 循环

    res = list('hello') #[’h','e','l','l','o']
    
    

    4、内置方法

    4.1 按索引取值(正向存取+反向存取):即可以取也可以改

    l=[111,'egon','hello']
    print(l[0]) #111
    print(l[-1]) #hello
    l[0]=222
    print(l) #[222, 'egon', 'hello']
    l[3]=333 #索引不存在会报错
    
    

    4.2 切片(顾头不顾尾,步长)[ 0 : 5 : 2]

    ​ 切片是一种拷贝行为,新建一个列表而且相当于浅copy

    l=[111,'egon','hello']
    print(l[0:3]) #[111, 'egon', 'hello']
    print(l[0:5:2]) # [[111, 'hello']
    print(id(l)) #4502840840
    new_l = l[:]
    print(id(new_l)) #4502996616
    print(l[0:len(l)]) #[111, 'egon', 'hello']
    print(l[:]) #[111, 'egon', 'hello']
    
    

    ​ 补充:

    ​ 对于不可变类型,通过完整切片得到的新数据指向同一个内存地址

    a = '123123'
    b = a[:]
    print(a,id(a)) #123123 4439713248
    print(b,id(b)) #123123 4439713248
    
    
    c = ('han', 1)
    d = c[:]
    print(c,id(c)) #('han', 1) 4307222088
    print(d,id(d)) #('han', 1) 4307222088
    
    

    4.3 成员运算 in 和 not in

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

    4.4 在指定位置插入值 insert(索引, 元素)

    ​ insert:按索引插入值

    l=[111,'egon','hello']
    l.insert(0,'alex') 
    print(l) ##['alex', 111, 'egon', 'hello']
    
    

    4.5 追加元素 append (元素 )

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

    4.6 追加多个值 extend( 可迭代对象或字符串)

    ​ extend(参数) #参数为可迭代对象或字符串

    ​ 它是将可迭代对象(或字符串)中的元素(或字母)取出再追加到调用该方法的列表中

    new_l=[1,2,3]
    l=[111,'egon','hello']
    l.extend(new_l)
    print(l) #[111, 'egon', 'hello', 1, 2, 3]
    l.extend('abc')
    print(l) #[111, 'egon', 'hello', 1, 2, 3, 'a', 'b', 'c']
    
    

    4.7 删除 del( 索引或切片) pop(索引) remove( 元素)

    ​ 方式一:del(索引或切片) :通用的删除方法,不是列表独有的,只是单纯的删除,没有返回值。

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

    ​ 方式二:pop( 索引):根据索引删除(不指定索引默认从最后删),有返回值(返回的删除的值)

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

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

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

    4.8 统计长度 len( )

    a = [1,'1vc', '123']
    print(len(a)) #3
    
    

    4.9 循环

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

    结果展示:

    1
    aaa
    
    

    4.10 统计个数 count(元素)

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

    4.11 返回索引 index('元素')

    l = [1, 'aaa', 'bbb','aaa','aaa']
    print(l.index('aaa')) #1 返回找到的第一个元素索引
    print(l.index('aaaaaaaaa')) # 找不到报错
    
    

    4.12 清空所有 clear()

    a1 = [1,4,5,7,2,3]
    a1.clear()
    print(a1) #[]
    
    

    4.13 reverse( ):将列表倒过来

    reverse修改的是原列表

    a1 = [1,4,5,7,2,3]
    a1.reverse()
    print(a1) #[3, 2, 7, 5, 4, 1]
    
    

    4.14 sort( ):排序

    sort用法:列表内必须全是同一种类型才可以排序,修改的是原列表

    ​ 默认是升序:从小到大排,修改的是原列表

    ​ l.sort( reverse = True) 降序:从大到小排

    a = [1,4,5,7,2,3]
    a.sort()
    print(a) #[1, 2, 3, 4, 5, 7] 升序
    a1 = [1,4,5,7,2,3]
    a1.sort(reverse=True)
    print(a1) #[7, 5, 4, 3, 2, 1] 降序
    l=[11,'a',12]
    l.sort() #报错,元素不是同种类型
    l1=['11','a','12']
    l1.sort()
    print(l1) #['11', '12', 'a']
    
    

    ​ 了解知识点:

    ​ 元素全为字符串可以比大小,按照 ASCIl码表的先后顺序加以区分,表中排在后面的字符大于前面的

    a = 'abdc'
    b = 'abcfd'
    print(a > b) #True
    
    

    列表也可以比大小,原理同字符串一样(按对应位置,依次 pk)注:对应的位置必须为同种类型,如果不是,比较会报错

    a = [1,'ab']
    b = [2]
    print(b > a) True
    
    

    ​ 补充

    ​ 队列:FIFO,先进先出

    l = []
    #入队操作
    l.append('first')
    l.append('second')
    l.append('third')
    print(l) #['first', 'second', 'third']
    #出队操作
    print(l.pop(0)) #first
    print(l.pop(0)) #second
    print(l.pop(0)) #third
    
    
    

    ​ 堆栈:LIFO:先进后出

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

    五 元组

    元组就是‘一个不可变的列表’,有索引,有序的, 存多个值

    元组不能改:指的是不能改变元组内元素的内存地址

    1、作用

    ​ 按照 索引/位置存放多个值,只用于读不用取

    ​ 当我有多个值,只有读的操作,没有取的操作就可以用元组存储,元组占的内存空间小(列表还提供取的机制,因此需要额外的内存空间存取的机制)

    2、 定义

    ​ ()内用逗号分隔多个任意类型的元素,如果元组中没有一个元素,必须加逗号(如: ( 元素 1,) )

    t = (1, 2, 'aa') #t = tuple((1,2,'aa'))
    print(t, type(t)) #(1, 2, 'aa') <class 'tuple'>
    
    x=(10) # 单独一个括号只代表包含的意思,不是元组
    print(x,type(x)) #10 <class 'int'>
    
    t1=(10,) # 如果元组中只有一个元素,必须加逗号
    print(t1,type(t1)) #(10,) <class 'tuple'>
    
    
    t=(1,1.3,'aa') # t=(0->值1的内存地址,1->值1.3的内存地址,2->值'aaa'的内存地址,)
    t[0]=11111 #报错
    
    t=(1,[11,22]) # t=(0->值1的内存地址,1->值[1,2]的内存地址,)
    print(id(t[0]),id(t[1])) 
    t[0]=111111111 # 不能改,报错
    t[1]=222222222 # 不能改,报错
    
    t[1][0]=11111111111111111 #可以改,改动是可变类型元素的子元素,可变类型元素 id 不变
    # print(t)
    print(id(t[0]),id(t[1]))
    
    

    3、类型转换

    ​ 将字符串、列表、字典转换为元组类型,相当于 for 循环取值后再用元组包含。

    print(tuple('hello')) #('h', 'e', 'l', 'l', 'o')
    print(tuple([1,2,3])) #(1, 2, 3)
    print(tuple({'a1':111,'a2':333})) #('a1', 'a2')
    
    

    4、内置方法

    ​ 优先掌握:

    4.1 按索引取值(正向取+反向取):只能取

    t=('aa','bbb','cc')
    print(t[0]) #aa
    print(t[-1]) #cc
    
    

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

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

    4.3 统计长度

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

    4.4 成员运算 in 和 not in

    t=('aa','bbb','cc','dd','eee')
    print('aa' in t) #True
    
    

    4.5 循环

    	t=('aa','bbb','cc','dd','eee')
    	for x in t:
        print(x, end=' ') #aa bbb cc dd eee 
    
    

    4.6 索引取值 index

    t=(2,3,111,111,111,111)
    print(t.index(111)) #t=('aa','bbb','cc','dd','eee')
    print(t.index(1111111111)) # 不存在会报错
    
    

    4.7 统计元素个数 count

    t=(2,3,111,111,111,111)
    print(t.count(t)) #4
    
    

    六 字典

    1、作用

    ​ 用途:储存多个不同类型的值

    2、定义

    ​ { 内用逗号分隔多个 key:value, 其中 value可以是可变型,key 必须是不可变类型

    字典没有索引,无序,可变类型,存多个值

    Info = { } #info = dict( )
    
    

    3、类型转换

    ​ 造字典方式一:

    d={'k1':111,(1,2,3):222} # d=dict(...)
    print(d['k1']) #111
    print(d[(1,2,3)]) #222
    print(type(d))  #<class 'dict'>
    d1={} # 默认定义出来的是空字典
    print(d,type(d1)) #{} <class 'dict'>
    
    

    ​ 造字典方式二:

    d = dict(x=1, y=2 , z=3)
    print(d) #{'x': 1, 'y': 2, 'z': 3}
    
    

    ​ 造字典方式三:

    a = [['name', 'han'],['age', 18]] #列表中的元素内的子元素个数必须为2 
    print(dict(a)) #{'name': 'han', 'age': 18}
    
    a1 = [('name', 'han1'),['age', 17]] 
    print(dict(a1)) #{'name': 'han1', 'age': 17}
    
    a2 = (('name', 'han2'),['age', 16])
    print(dict(a2)) #{'name': 'han2', 'age': 16}
    
    a4 = (('name', 'han3'),('age', 20))
    print(dict(a4)) #{'name': 'han3', 'age': 20}
    
    

    ​ 造字典方式四:快速初始化一个字典

    	  d= { }.fromkeys([ 元素 1, 元素 2  ],  参数  )  :会将列表中的每个元素当做 字典的 key,参数会被当做 值 传给每个 key 对应的 value。
    
    list1 = ['name', 'age', 'gender']
    d = {}.fromkeys(list1, None)
    print(d) #{'name': None, 'age': None, 'gender': None}
    
    

    4、内置方法

    ​ 优先掌握:

    1 按 key 存取值:可存可取

    d={'k1':111}
    # 针对赋值操作:key存在,则修改
    d['k1']=222
    # 针对赋值操作:key不存在,则创建新值
    d['k2']=3333
    print(d) #{'k1': 222, 'k2': 3333}
    
    

    2 统计长度 len

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

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

    ​ 字典的成员运算判断的是否在字典中keys中

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

    4 删除

    ​ 4.1 del 通用删除

    d={'k1':111,'k2':2222}
    del d['k1']
    print(d) #{'k2': 2222}
    
    

    ​ 4.2 pop 删除

    pop(key):根据 key 删除元素,有返回值,返回删除 key 对应的 value 值

    必须指定 key,因为字典是无序的,没有索引

    d={'k1':111,'k2':2222}
    res=d.pop('k2')
    print(d)  #{'k1': 111}
    print(res) #2222
    
    

    ​ 4.3 popitem 删除

    它是随机删除,没有参数,返回的是元组(key,value)

    d={'k1':111,'k2':2222}
    res=d.popitem()
    print(res) #('k2', 2222)
    print(d) #{'k1': 111}
    
    

    5 键 keys( )、值 values( )、items( )

    ​ 在 python2 中,一般返回的都是列表(相当于鸡蛋)

    ​ items() :返回的值是列表套元组的方式:[ (key1, value1), (key2, value2 ) ]

    在python2中
    >>> d={'k1':111,'k2':2222}
    >>> 
    >>> d.keys()
    ['k2', 'k1']
    >>> d.values()
    [2222, 111]
    >>> d.items()
    [('k2', 2222), ('k1', 111)]
    >>> dict(d.items())
    {'k2': 2222, 'k1': 111}
    >>>
    
    

    ​ 在 python3 中,一般返回的都是可迭代对象(相当于老母鸡),它是 python3 中的一种在内存中存取的优化,占用的内存空间非常少

    >>> d={'k1':111,'k2':222}
    >>> d.keys()
    dict_keys(['k1', 'k2'])
    >>> print(d.keys())
    dict_keys(['k1', 'k2'])
    >>> print(type(d.keys()))
    <class 'dict_keys'>
    >>> d.values()
    dict_values([111, 222])
    >>> d.items()
    dict_items([('k1', 111), ('k2', 222)])
    >>> dict(d.items())
    {'k1': 111, 'k2': 222}
    >>> 
    
    

    6 for循环

    d={'k1':111,'k2':222}
    for k,v in d.items():
        print(k,v) 
    
    

    ​ 结果展示:

    k1 111
    k2 2222
    
    
    d={'k1':111,'k2':222}
    print(d.items()) #dict_items([('k1', 111), ('k2', 2222)])
    pirnt(list(d.items)) #[('k1', 111), ('k2', 2222)]
    
    
    d={'k1':111,'k2':2222}
    res1 = dict(d.items())
    print(d,id(d)) #{'k1': 111, 'k2': 2222} 4420553104
    print(res1, id(res1)) #{'k1': 111, 'k2': 2222} 4422053960 
    
    

    ​ 需要掌握的:

    1 clear 全部清除

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

    2、update(参数:字典类型)

    ​ 用新字典替换旧字典,有 key 则改对应的值,无 key 则添加键值对

    d={'k1':111}
    d.update({'k2':222,'k3':333,'k1':111111})
    print(d) #{'k1': 111111, 'k2': 222, 'k3': 333}
    
    

    3、get( ) 根据 key 取值,容错性好

    ​ get( ):可以指定返回值,不指定默认返回 None

    d={'k1':111}
    print(d['k2'])  # key不存在则报错
    print(d.get('k2')) #None key 不存在返回 None
    print(d.get('k1')) # 111
    print(d.get('k2', '目标不存在'))#目标不存在,返回指定值
    
    

    4、setdefault(key, value )

    ​ 1)有 key 则不添加,返回字典中对应value 值

    info={'name':'egon'}
    res=info.setdefault('name','alex')
    print(res) #egon
    print(info) #{'name': 'egon'}
    
    

    ​ 2)key 不存在时则添加,返回新增的value值 ,且字典新增键值对

    info={'name':'egon'}
    res=info.setdefault( 'age', 18)
    print(res) #18
    print(info) #{'name': 'egon', 'age': 18}
    
    

    七 集合

    1、什么是集合

    ​ 可以存多个值,不是用来取单个值使用的,它是将所有值放到一起,整体去使用,主要用于:去重和运算。

    它是无序的,可变类型(不可修改,可增删),存多个值

    ​ 1.1 关系运算

    l1 = ['han','egon','tank']
    l2 = ['han', 'alex', 'sean']
    l3 = []
    for i in l1:
        if i in l2:
            l3.append(i)
    print(l3) #['han']
    
    

    2、定义

    ​ 在{ }内用多个逗号分隔来多个元素,多个元素满足以下三个条件

    1、集合内元素必须为不可变类型(指的是被去重对象取出的元素必须为不可变类型)

    2、集合内元素无序

    3、集合元素没有重复

    注意集合的目的是将不同的值存放到一起,不同的集合间用来做关系运算,无需纠结于集合中单个值

    s = set()#空集合
    s = {1,[1,23] }#报错,集合内元素必须为不可变类型
    s = {1,1,'a','b'} 
    print(s) #{1,'a','b'} 去重了
    
    s = {1,'c',2,'b'}
    print(s,type(s)) #{1, 2, 'c', 'b'} <class 'set'> #无序的
    
    l = [{'name':'egon'}, {'name':'alex'}]
    print(set(l))# 报错
    
    

    3、类型转换

    res = set('hello world')
    print(res) #{'e', 'o', ' ', 'w', 'h', 'r', 'l', 'd'}
    
    res1 = [1,1,2,[22,11]]
    print(set(res1)) #报错
    
    res2 = {'name':'han','age':18}
    print(set(res2))#{'age', 'name'}
    
    res3 = ('han','123','egon','123')
    print(set(res3))#{'123', 'egon', 'han'}
    
    

    4、内置方法

    ​ 关系运算

    l1 = {'han','egon','tank','jason'}
    l2 = {'han', 'alex', 'sean','jason'}
    
    

    1、取交集

    res = l1 & l2
    print(res) #{'han', 'jason'}
    print(l1.intersection(l2))
    
    

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

    print(l1 | l2) #{'egon', 'sean', 'tank', 'han', 'jason', 'alex'}
    print(l1.union(l2))
    
    

    3、取差集:取l1 独有的好友
    取差集:取l2 独有的好友

    print(l1-l2) #{'tank', 'egon'}
    print(l1.different(l2))
    
    print(l2 - l1) #{'sean', 'alex}
    print(l2.difference(l1))
    
    

    4、对称差集: 两个集合独有的元素(即去掉共同元素)

    print(l1 ^ l2) #{'tank', 'alex', 'egon', 'sean'}
    print(l1.symmetric_difference(l2))
    
    

    5、父子集:包含关系

    s1 = {'a', 'b', 'c'}
    s2 = {'a', 'b', 'd'}
    s3 = {'a', 'b'}
    print(s1 >= s2) #False  当s1大于或等于s2时,才能说是s1是s2他爹
    print(s1.issuperset(s2))
    print(s1 >= s3) #True
    
    
    s1={1,2,3}
    s2={1,2,3}
    print(s1 == s2) # s1与s2互为父子
    print(s1.issuperset(s2))
    print(s2.issuperset(s1))
    
    

    6、对于可变类型的元素去重方式

    # 去重
    l=[
        {'name':'egon','age':18,'sex':'male'},
        {'name':'alex','age':73,'sex':'male'},
        {'name':'egon','age':20,'sex':'female'},
        {'name':'egon','age':18,'sex':'male'},
        {'name':'egon','age':18,'sex':'male'},
    ]  
    # print(set(l)) #报错:unhashable type: 'dict'
    s=set()
    l1=[]
    for item in l:
        val=(item['name'],item['age'],item['sex'])
        if val not in s:
            s.add(val)
            l1.append(item)
    
    print(l1)
    
    

    其他内置方法

    需要掌握:

    1 discard 删除

    ​ 1)当元素不存在时,不做动作

    ​ 3)当元素存在时,删除 元素,无返回值

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

    2 update 取两个集合的并集重新赋给该集合

    s={1,2,3}
    print(s.update({1,3,5})) #None
    print(s) #{1, 2, 3, 5}
    
    

    3 pop 随机删除

    s={1,2,3}
    res=s.pop()
    print(res) #{1,2}
    
    

    4 add 添加元素

    s={1,2,3}
    s.add(4)
    print(s) #{1,2,3,4}
    
    

    了解:

    ​ 1 isdisjoint ( )

    ​ 判断两个集合是否有交集部分

    ​ 当两个集合完全独立,没有交集,返回 True

    s = {1,2,3}
    res=s.isdisjoint({4,5,6}) # 两个集合完全独立、没有共同部分,返回True
    print(res) #True
    res= s.isdisjoint({3,4,6})#False
    
    

    ​ 2 difference( ) difference_update( )

    difference:取该集合独有的部分(减去两集合的交集)

    s = {1,'aa',4, 6}
    print(s.difference({'aa',4,5})) #{1, 6} 
    print(s) #{1,4,6,'aa'}
    
    

    ​ difference_update:取该集合的(减去两个集合相交的部分)的独有部分重新赋值给该集合。

    s = {1,'aa',4, 6}
    print(s.difference_update({4, 5})) #None
    print(s)#{1, 'aa', 6}
    
    

    八 总结与分类

    ​ 有序 or 无序:有序 又称之为序列类型

    ​ 存一个值 or 多个值:存一个值称之为原子类型,存多个值称之容器类型

    ​ 可变 or 不可变

    1 按存值个数区分

    ​ 只能存一个值:可称为标量/原子类型 如:数字、字符串

    ​ 可以存放多个值:可以称为容器类型 如:列表、元组、字典

    2 按照访问方式区分

    ​ 直接访问:只能通过变量访问整个值 如:数字

    ​ 顺序访问:可以索引访问指定的值,索引代表顺序、又称为序列类型 如字符串、列表、元组

    ​ key 访问:可以用 key 访问指定的值、又称映射类型 如:字典

    3 按照可变不可变区分

    可变类型 如:列表、字典 、集合

    不可变类型 如:字符串 、元组

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

    数字
    字符串
    集合:无序,即无需存索引相关信息
    元组:有序,需要存索引相关信息,不可变
    列表:有序,需要存索引相关信息,可变,需要处理数据的增删改
    字典:无序,需要存key与value映射的相关信息,可变,需要处理数据的增删改
    
    
  • 相关阅读:
    试试用有限状态机的思路来定义javascript组件
    利用grunt-contrib-connect和grunt-connect-proxy搭建前后端分离的开发环境
    利用bootstrap的modal组件自定义alert,confirm和modal对话框
    利用轮播原理结合hammer.js实现简洁的滑屏功能
    等高分栏布局小结
    圣杯布局小结
    浏览器缓存知识小结及应用
    基于淘宝弹性布局方案lib-flexible的问题研究
    淘宝弹性布局方案lib-flexible实践
    Js位置与大小(1)——正确理解和运用与尺寸大小相关的DOM属性
  • 原文地址:https://www.cnblogs.com/xy-han/p/12459247.html
Copyright © 2020-2023  润新知