zoukankan      html  css  js  c++  java
  • 04-各数据类型的常用操作

    一、数字类型:int与float类型

    # 1、操作:
    # 比较运算:int与float之间是可以比较大小
    # 数学运算:+-*/,int与float之间也可以进行数学运算
    print(10 > 3.1)     #True
    print(10 * 3.1)     #31
    
    #str、list比较运算返回bool值
    print('x' > 'y')       #False  字符串间比较大小是比较第一个字符的ASCII码
    print([1,2,3] > [4,5])  #False
    print([1,2,3] > 10)    #error:'>' not supported between instances of 'list' and 'int'

    进制转换:

    print(bin(55))            #转成二进制  0b110111
    print(oct(11))            #转成八进制  0o13
    print(hex(55))            #转成十六进制 0x37
    print(int("0b110111",2))     #转换成十进制,必须加引号,后加进制数
    print(int("0o13",8))        #转换成十进制,必须加引号,后加进制数
    print(int("0x37",16))       #转换成十进制,必须加引号,后加进制数

    二、字符串类型

    1、字符串的直接操作:

    # 1、按索引取值(正向取+反向取) :只能取
    name='egon'
    print(name[0])
    print(name[-1])
    #name[0]='E' # 错误,字符串只能按照索引取值
    
    # 列表可以修改指定位置的值
    l=['aaa','bbb','ccc']
    l[0]='AAA'
    print(l)
    
    # 2、切片(顾头不顾尾,步长):从一个大的字符串中copy出来了一个子字符串,原字符串不变
    msg='hello egon'
    print(msg[1:4])
    print(msg)
    
    #print(msg[0:5:-1])  #错误! 运行结果为空,从0起始到5,反向步长,所以为空
    
    print(msg[0:50])        #实际上还是打印整个字符串,底层机制应该是从0—49依次判断,直至字符串终止
    
    msg = 'hello egon'
    # 把原字符串完成拷贝一遍
    print(msg[0:10])
    print(msg[0:len(msg)])
    print(msg[0:])
    print(msg[:])
    
    # 隔一个取
    msg='hello egon'
    print(msg[0:10:2]) # 0 2  4 6 8
    #h l  o e o
    print(msg[::2]) # 0 2  4 6 8
    
    # 3、长度len
    msg='hello egon'
    print(len(msg))
    
    name=input('情输入你的用户名:') # name=''
    if not name:# 当用户输入的内容为空的时候,条件成立
        print('用户输入的内容为空')
    else:
        print('用户输入的内容不为空')
    
    
    if len(name) == 0:
        print('用户输入的内容为空')
    else:
        print('用户输入的内容不为空')
    
    
    # 4、成员运算in和not in:判断一个子字符串是否存在于一个大字符串
    
    res='egon' in 'egon is dsb'
    print(res)

    2、字符串类型的常用函数操作:

    #1、strip,lstrip,rstrip            形式:str.strip(str)
    #2、lower,upper                 形式:str.lower()  str.upper()
    #3、startswith,endswith            形式:str.startswith(str)
    #4、format                    形式:print("xxxx{}{}{}".fomat(n1,n2,n2))  n为变量
    #5、cout函数                   形式:str.cout(str, start=0, end=len(str))
    #6、split,rsplit函数              形式:str.split(str)
    #7、join函数                   形式:str="-" seq=(str1, str2, str3)  str.join(str)
    #8、replace                   形式:str.replace(oldstr, newstr, max times)
    #9、isdigit                   形式:str.isdigit
    #1、strip,lstrip,rstrip
    x = "  0011   "
    print(x.strip())
    print(x.lstrip())
    print(x.rstrip())
    print(x.strip(' 0'))    #不用逗号隔开,只用一个字符串包含所有需要删除的字符
    
    #2、lower,upper
    #lower,upper
    name='EGON'
    print(name.lower())     #将字符串改为小写
    print(name.upper())     #将字符串改为大写
    
    
    #3、startswith,endswith
    name='alex_SB'
    print(name.endswith('SB'))      #判断是否以SB结尾
    print(name.startswith('alex'))  #判断是否以alex开头
    
    
    #4、format的三种玩法
    #format():把传统的%替换为{}来实现格式化输出
    #其实就是format()后面的内容,填入大括号中(可以按位置,或者按变量)
    res='个人资料:{} {} {}'.format('egon',18,'male')         #按顺序填入
    print(res)
    
    #这里注意有两层大括号,输出的结果只有一层大括号
    print('数字{{{1}{2}}}和{0}'.format("123",456,'789'))
    
    res='个人资料:{1} {0} {2}'.format('egon',18,'male')     #按括号中元素编号索引,0代表第一个数据元素,1代表第二个
    print(res)
    
    res='个人资料:{name} {age} {sex}'.format(sex='male',name='egon',age=18)      #按变量填入
    print(res)
    
    #5、cout函数
    '''
    count()方法语法:
    str.count(sub, start= 0,end=len(string))
    
    Python count() 方法用于统计字符串里某个字符出现的次数。可选参数为在字符串搜索的开始与结束位置。
    sub -- 搜索的子字符串
    start -- 字符串开始搜索的位置。默认为第一个字符,第一个字符索引值为0。
    end -- 字符串中结束搜索的位置。字符中第一个字符的索引为 0。默认为字符串的最后一个位置。
    '''
    name= "key: :jj:dic"
    print(name.count(":",0,6))  #1个冒号,从第一个字符到第六个字符(5号字符)
    
    
    #6、split,rsplit函数
    '''
    str.split(str="", num=string.count(str)).
    str -- 分隔符,默认为所有的空字符,包括空格、换行(
    )、制表符(	)等。
    num -- 分割次数。默认为 -1, 即分隔所有。
    '''
    
    name= "key: :jj:dic"
    print(name.split(":"))      #结果为['key', '', 'jj', 'dic'],以冒号为分隔符,分隔全部,建立列表
    
    print(name.split())         #默认分隔符为空格
    
    name='C:/a/b/c/d.txt' #只想拿到顶级目录
    print(name.split('/',1))    #运行结果['C:', 'a/b/c/d.txt']
    print(name.split('/',2))    #运行结果['C:', 'a', 'b/c/d.txt']
    print(name.split('/',-1))   #-1代表分隔所有
    
    
    #7、join函数
    # Python join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串。
    # 参数:sequence -- 要连接的元素序列
    
    tag=' '
    print(tag.join(['egon','say','hello','world'])) #可迭代对象必须都是字符串
    #运行结果egon say hello world,以' '分隔
    
    str = "-"
    seq = ("a", "b", "c") # 字符串序列
    print(str.join(seq))
    #运行结果a-b-c,以"-"分隔
    
    
    #print(tag.join('egon','say','hello','world'))  #错误,.join()中的变量应该是列表类型
    
    print(tag)                      #tag没变,.join还是创建了一个新的变量副本
    
    #8、replace
    '''
    描述
    Python replace() 方法把字符串中的 old(旧字符串) 替换成 new(新字符串)
    如果指定第三个参数max,则替换不超过 max 次。
    
    语法
    replace()方法语法:
    
    str.replace(old, new, max)
    参数
    old -- 将被替换的子字符串。
    new -- 新字符串,用于替换old子字符串。
    max -- 可选字符串, 替换不超过 max 次
    '''
    name='alex say :i have one tesla,my name is alex'
    
    print(name.replace('alex','SB',1))      #"alex"被替换的子字符串,"SB"新字符串,用于替换old字符串,1最大替换次数
    
    
    #9、isdigit
    #isdigit:可以判断bytes和unicode类型,是最常用的用于于判断字符是否为"数字"的方法
    age=input('>>: ')
    print(age.isdigit())

    逻辑运算符补充(短路运算):https://www.cnblogs.com/zhubincheng/p/12341470.html

    3、字符串类型需了解的操作:

    #1、find,rfind,index,rindex,count
    name='egon say hello'
    print(name.find('n',1,4))           #顾头不顾尾,找不到则返回-1不会报错,找到了则显示索引
                                        # 即返回其位置,如上则返回3
    # print(name.index('e',2,4))        #同上,但是找不到会报错
    print(name.count('e',1,3))          #顾头不顾尾,如果不指定范围则查找所有
    
    
    #2、center,ljust,rjust,zfill
    name='egon'
    print(name.center(30,'-'))          # center()返回一个原字符串居中,并使用空格填充至长度 width 的新字符串。默认填充字符为空格。
    # str.center(width, fillchar)   参数:width -- 字符串的总宽度。  fillchar -- 填充字符。
    
    print(name.ljust(30,'*'))           # ljust() 方法返回一个原字符串左对齐,并使用空格填充至指定长度的新字符串。如果指定的长度小于原字符串的长度则返回原字符串。
    #str.ljust(width, fillchar)     参数:width -- 指定字符串长度。   fillchar -- 填充字符,默认为空格。
    
    print(name.rjust(30,'*'))
    print(name.zfill(50)) # zfill() 方法返回指定长度的字符串,原字符串右对齐,前面填充0。
    #str.zfill(width)               参数:width -- 指定字符串的长度。原字符串右对齐,前面填充0。
    
    #3、expandtabs
    name='egon	hello'
    print(name)
    print(name.expandtabs(1))    #Python expandtabs() 方法把字符串中的 tab 符号('	')转为空格,tab 符号('	')默认的空格数是 8。
    
    #4、captalize,swapcase,title
    print(name.capitalize())    #首字母大写
    print(name.swapcase())      #大小写翻转
    msg='egon say hi'
    print(msg.title())          #每个单词的首字母大写
    
    #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(num1.isnumeric())  # AttributeError: 'bytes' object has no attribute 'isnumeric'
    print(num2.isnumeric()) #True
    print(num3.isnumeric()) #True
    print(num4.isnumeric()) #True
    
    #三者不能判断浮点数
    num5='4.3'
    print(num5.isdigit())
    print(num5.isdecimal())
    print(num5.isnumeric())
    '''
    总结:
        最常用的是isdigit,可以判断bytes和unicode类型,这也是最常见的数字应用场景
        如果要判断中文数字或罗马数字,则需要用到isnumeric
    '''
    
    #is其他
    print('===>')
    name='egon123'
    print(name.isalnum()) #字符串由字母或数字组成
    print(name.isalpha()) #字符串只由字母组成
    
    print(name.isidentifier())      #如果字符串是有效标识符,则 isidentifier() 方法返回 True,否则返回 False。
                                    #如果字符串仅包含字母数字字母(a-z)和(0-9)或下划线(_),则该字符串被视为有效标识符。有效的标识符不能以数字开头或包含任何空格。
    print(name.islower())           #Python islower() 方法检测字符串是否由小写字母组成。
    print(name.isupper())           #Python islower() 方法检测字符串是否由大写字母组成。
    print(name.isspace())           #Python isspace() 方法检测字符串是否只由空格组成。
    print(name.istitle())           #Python istitle() 方法检测字符串中所有的单词拼写首字母是否为大写,且其他字母为小写。

    三、列表类型 

    # 1、作用:按位置存放多个值
    # 2、定义
    l=[1,1.2,'a']               # 相当于l=list([1,1.2,'a'])
    print(l)                    # 运行结果为:[1, 1.2, 'a']
    print(type(l))              # 运行结果为:<class 'list'>
    
    
    # 3、类型转换: 但凡能够被for循环遍历的类型都可以当做参数传给list()转成列表
    res=list('hello')
    print(res)                  # 运行结果为:['h', 'e', 'l', 'l', 'o']
    
    res=list({'k1':111,'k2':222,'k3':3333})
    print(res)                  # 运行结果为:['k1', 'k2', 'k3']

    优先掌握的操作:

    # 优先掌握的操作:
    # 1、按索引存取值(正向存取+反向存取):即可存也可以取
    l = ['aaa', 'bbb', 'ccc']
    l[-1]='CCC'
    print(l)
    
    # 2、切片(顾头不顾尾,步长):从一个大列表中复制出一个子列表
    l=['aaa','bbb','ccc','ddd','eee']
    res=l[1:4]
    print(res)
    
    print(l)
    
    
    # 3、长度
    l=['aaa','bbb','ccc','ddd','eee']
    print(len(l))
    
    # not l             #判断是否为空
    # len(l) == 0
    
    # 4、成员运算in和not in
    l=['aaa','bbb','ccc','ddd','eee']
    res='aaa' in l
    print(res)
    

    列表---增

    # 5.1 追加    list.append(object)
    # 在列表最后追加对象
    l=[111,'egon','hello']
    l.append(3333)          
    l.append(4444)
    print(l)            # 运行结果:[111, 'egon', 'hello', 3333, 4444]
    
    # 5.2、插入值  list.insert(index,object)
    # 在索引位置前添加列表元素
    l=[111,'egon','hello']
    l.insert(0,'alex')       # 在0号索引前添加元素"alex"
    print(l)                 # 运行结果:['alex', 111, 'egon', 'hello']
    
    # 5.3、extend添加值 (在列表后添加可迭代对象的所有元素)
    new_l=[1,2,3]           
    l=[111,'egon','hello'] 
    l.append(new_l)             # 运行结果:[111, 'egon', 'hello', [1, 2, 3]]
    print(l)
    
    # 代码实现(不使用extend)
    for item in new_l:
        l.append(item)
    print(l)
    
    # extend实现上述代码
    l.extend(new_l)     
    l.extend('abc')
    print(l)                # 运行结果:[111, 'egon', 'hello', [1, 2, 3], 1, 2, 3, 'a', 'b', 'c']  

    列表---删

    # 6、删除
    # 方式一:通用的删除方法,只是单纯的删除、没有返回值
    l = [111, 'egon', 'hello']
    del l[1]
    # x =del l[1]       # 抛出异常,不支持赋值语法
    print(l)            # 运行结果:[111, 'hello']
    
    # 方式二:l.pop()根据索引删除,会返回删除的值
    l = [111, 'egon', 'hello']
    l.pop()                     # 不指定索引默认删除最后一个
    print(l)                    # 运行结果为:[111, 'egon']
    
    res=l.pop(1)                # list.pop()的返回值为egon,即删除的元素
    print(l)                    # 运行结果为:[111]
    print(res)                  # 运行结果为:egon
    
    # 方式三:l.remove()根据元素删除,返回None
    #注意:remove的删除,是从前往后寻找该元素,一旦找到便删除,即每次删除最靠前的元素。
    l = [111, 'egon', [1,2,3],'hello']
    l.remove([1,2,3])
    print(l)                        # 运行结果为:[111, 'egon', 'hello']
    res=l.remove('egon')
    print(res)                      # 运行结果为:None
    # 7、循环
    l = ['aaa', 'bbb', 'ccc',[1,2,3]]
    for item in l:
        print(item)
    
    #ps:反向步长
    l=[1,2,3,4,5,6]
    
    print(l[-2:0:-2])       # 结果为[5,3]  顾头不顾尾,如果写到0的话,index=0被舍弃
    print(l[-2::-2])        # 结果为[5,3,1]    不填写参数,默认取到头
    
    #正向步长
    print(l[0:3:1])    #[1, 2, 3]
    #反向步长
    print(l[2::-1])    #[3, 2, 1]
    #列表翻转
    print(l[::-1])     #[6, 5, 4, 3, 2, 1]
    
    #pps:for循环使用嵌套切片
    #就是利用range()函数生成1-99的整数,然后从start_index=2(即3)开始以step=3取值,直到终点,再在新序列中取最后五个数。
    for i in range(1,100)[2::3][-5::]:
        print(i,end=" ")                    # 输出结果 87 90 93 96 99

    列表--内置方法

    需要掌握:
    l = [1, 'aaa', 'bbb','aaa','aaa'] # 1、l.count() # 在列表中找元素的个数 print(l.count('aaa')) # 运行结果:3 # 2、l.index() # 在列表中找到该元素,并返回其索引位置(从左往右找到第一个) print(l.index('aaa')) # 运行结果:1 # print(l.index('aaaaaaaaa')) # 与字符串相同,找不到报错 # 3、l.clear() # 清空列表 l.clear() print(l) # 运行结果:[] # 4、l.reverse():不是排序,就是将列表倒过来 # list.reverse() 无返回值 l = [1, 'egon','alex','lxx'] print(l.reverse()) # 运行结果为: None print(l) # 运行结果为:['lxx', 'alex', 'egon', 1] # 5、l.sort(): 列表内元素必须是同种类型才可以排序 # 默认升序,若需降序则置reverse = True l=[11,-3,9,2,3.1] l.sort() # 默认从小到大排,称之为升序 l.sort(reverse=True) # 从大到小排,设置为降序 print(l) # 运行结果为:[11, 9, 3.1, 2, -3] # l=[11,'a',12] # l.sort() # 不同数据类型无法排序 l=['c','e','a'] l.sort() # 字符串按照ASCII码排序 print(l) # 运行结果为:['a', 'c', 'e'] # 了解:字符串可以比大小,按照对应的位置的字符依次pk # 字符串的大小是按照ASCI码表的先后顺序加以区别,表中排在后面的字符大于前面的 print('a'>'b') print('abz'>'abcdefg') # 运行结果为:True # 了解:列表也可以比大小,原理同字符串一样,但是对应位置的元素必须是同种类型 l1=[1,'abc','zaa'] l2=[1,'abc','zb'] print(l1 < l2) # 运行结果为:True

    列表---队列与堆栈

    # 1、队列:FIFO,先进先出
    # l=[]
    # # 入队操作
    l.append('first')
    l.append('second')
    l.append('third')
    #
    # print(l)
    # # 出队操作
    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)
    # 出队操作
    print(l.pop())
    print(l.pop())
    print(l.pop())

    四、元组

     元组就是"一个不可变的列表"
    #1、作用:
    按照索引/位置存放多个值,只用于读不用于改
    #2、定义:
    ()内用逗号分隔开多个任意类型的元素
    # 2.1 定义方法: t=(1,1.3,'aa') # 相当于t=tuple((1,1.3,'aa')) print(t,type(t)) # 运行结果为:(1, 1.3, 'aa') <class 'tuple'> x=(10) # 单独一个括号代表包含的意思 print(x,type(x)) # 运行结果为:10 <class 'int'> t=(10,) # 如果元组中只有一个元素,必须加逗号 print(t,type(t)) # 运行结果为:(10,) <class 'tuple'> # 2.2 元组中保存的地址不可改: 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])) # 18行 # # t[0]=111111111 # 不能改 # # t[1]=222222222 # 不能改 t[1][0]=11111111111111111 # 可变数据类型中的值可作修改,因为此时元组中保存的地址未发生变化 print(t) # 运行结果为:(1, [11111111111111111, 22]) print(id(t[0]),id(t[1])) # 与18行代码的地址打印相同 #2.3 节省内存: import sys # 导入sys模块,使用sys.getsizeof() 查看在内存中所占字节数 a = (11,[15,17]) b = [11,[15,17]] # 元组相较于列表的存储更精简空间 print(a,sys.getsizeof(a)) # 运行结果为:(11, [15, 17]) 56 print(b,sys.getsizeof(b)) # 运行结果为:[11, [15, 17]] 72 #3、类型转换 #与list一样,可迭代对象都能转换成元组tuple print(tuple('hello')) # 运行结果为:('h', 'e', 'l', 'l', 'o') print(tuple([1,2,3])) # 运行结果为:(1, 2, 3) print(tuple({'a1':111,'a2':333})) # 运行结果为:('a1', 'a2')

    元组---内置方法

    #优先掌握的操作:
    #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、index、count
    t=(2,3,111,111,111,111)
    print(t.index(111))                 # 运行结果为:2    即在2号索引位置找到111
    # print(t.index(1111111111))        # 不存在的元素将报错

    五、字典 

    造字典五法

    #1、作用
    
    #2、定义:{}内用逗号分隔开多个key:value,其中value可以使任意类型,但是
    #                                       key必须是不可变类型,且不能重复
    # 造字典的方式一:
    d={'k1':111,(1,2,3):222}            # d=dict(...)
    print(d['k1'])
    print(d[(1,2,3)])
    print(type(d))                      # <class 'dict'>
    
    d={}                                # 默认定义出来的是空字典
    print(d,type(d))                    # {} <class 'dict'>
    
    # 造字典的方式二:
    d=dict(x=1,y=2,z=3)
    print(d,type(d))                    # {'x': 1, 'y': 2, 'z': 3} <class 'dict'>
    
    
    #3、数据类型转换(造字典的方法三)
    info=[
        ['name','egon'],
        ('age',18),
        ['gender','male']
    ]
    '''
    d={}
    for k,v in info:                    # 实质上就是一个解压操作:k,v=['name','egon']
        d[k]=v
    print(d)
    '''
    # 造字典的方式三:
    # dict(iterable)
    # 实质上是对可迭代对象中元素依次进行解压操作,所以可迭代对象中的元素必须都包含两个子元素,不然将无法解压。
    # 相当于 key,value = [x1,x2]/"x1x2"/...依次迭代
    res=dict(info)                      # 一行代码搞定上述for循环的工作
    print(res)                          #{'name': 'egon', 'age': 18, 'gender': 'male'}
    
    # 造字典的方式四:快速初始化一个字典
    keys=['name','age','gender']
    '''
    d={}
    for k in keys:
        d[k]=None
    print(d)
    '''
    # dict.fromkeys(iterable,value) 即需传参,可迭代对象与值
    d={}.fromkeys(keys,None)            # 一行代码搞定上述for循环的工作
                          # 此处初始化列表,一般用None或不可变类型,
                          # 若使用可变类型,则所有的key中的value都指向该可变类型,一变都变。
    
    print(d)                            #{'name': None, 'age': None, 'gender': None}
    
    
    # 造字典的方式五:for语句
    {v: k for k, v in obj_dict.items()}
    obj.__dict__={'_%s__%s' %(StanfordTeacher.__name__,k):v for k,v in obj.__dict__.items()}   # 可以如此操作将对象的字典属性改为隐藏属性

    字典---优先掌握操作

    #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,'k1':3333,'k1':4444}
    print(d)                            # 重复key,默认只取最后一个
    print(len(d))                       # 长度依然为2
    
    
    #3、成员运算in和not in:根据key
    d={'k1':111,'k2':2222}              # 只判断key是否在dict中
    print('k1' in d)                    # True
    print(111 in d)                     # False
    
    #4、删除
    d={'k1':111,'k2':2222}
    # 4.1 通用删除 del
    del d['k1']                         # 不可赋值给别的变量
    print(d)                            # {'k2': 2222}
    
    d={'k1':111,'k2':2222}
    # 4.2 pop删除:根据key删除元素,返回删除key对应的那个value值
    res=d.pop('k2')                     # 返回2222
    print(d)                            # {'k1': 111}
    print(res)                          # 2222
    
    d={'k1':111,'k2':2222}
    # 4.3 popitem删除:随机删除,返回元组(删除的key,删除的value)
    # dict.popitem() 不可传参,只能随机删除
    res=d.popitem()                     # 返回元组(删除的key,删除的value)
    print(d)                            # {'k1': 111}
    print(res)                          # ('k2', 2222)
    
    #5、键keys(),值values(),键值对items()  =>在python3中得到的是老母鸡
    d={'k1':111,'k2':2222}
    '''
    在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中更节省空间
    
    #6、for循环
    for k in d.keys():
        print(k)                        # 输出 key
    
    for k in d:
        print(k)                        # 输出 key
    
    for v in d.values():
        print(v)                        # 输出 value
    
    for k in d.items():                 # 输出元组(key,value),可改写k,v in d.items()进行解压
        print(k)                        # 输出 (key,value)
    '''
    在python3中如python2输出:
    
    print(list(d.keys()))
    print(list(d.values()))
    print(list(d.items()))
    '''

    字典---内置方法

    #需要掌握的内置方法
    d={'k1':111}
    
    #1、d.clear()
    # 清空字典
    
    #2、d.update()
    # 传入另一个字典来更新原有字典。
    # 原字典若有重复的key,以传入的列表中key对应的value更新。
    # 原字典若无传入列表的key,则以传入列表为准补充
    d.update({'k2':222,'k3':333,'k1':111111111111111})
    print(d)                         # {'k1': 111111111111111, 'k2': 222, 'k3': 333}
    
    #3、d.get() :根据key取值,容错性好
    d={'k1':111}
    #print(d['k2'])                     # key不存在则报错
    
    print(d.get('k1'))                  # 111
    print(d.get('k2'))                  # key不存在不报错,返回None
    print(d.get(“k2”,"不存在该值"))    # 不存在该值   如果在get(key,“”)中,key后追加值,就可返回该值而不再是None
    
    
    #4、d.setdefault()
    info={}
    if 'name' in info:
        ...                             # 等同于pass
        pass                            # 占位语句,不做任何事
    else:
        info['name']='egon'
    print(info)                         # {'name': 'egon'}
    
    # 4.1 如果key有则不添加,返回字典中key对应的值
    info={'name':'egon'}
    res=info.setdefault('name','jil')
    print(info)                         # {'name': 'egon'}
    print(res)                          # egon      此处还是返回字典中key对应的值
    
    print(res)
    
    # 4.2 如果key没有则添加,返回字典中key对应的值
    info={}                             # 没有"name",添加
    res=info.setdefault('name','egon')
    print(info)                         # {'name': 'egon'}
    print(res)                          # egon

     六、集合

    1、作用、定义与类型转换

    1.1 关系运算
    friends1 = ["zero","kevin","jason","egon"]
    friends2 = ["Jy","ricky","jason","egon"]
    
    l=[]
    for x in friends1:
        if x in friends2:
            l.append(x)
    print(l)
    1.2 去重(可以对列表进行去重,但无序)
    l = [1,1,1,"a","b",2,2,3,4]
    s = set(l)
    print(s)                            # {1, 2, 3, 4, 'a', 'b'}

    1.3 定义:
    在{}内用逗号分隔开多个元素,多个元素满足以下三个条件
    #            1. 集合内元素必须为不可变类型
    #            2. 集合内元素无序
    #            3. 集合内元素没有重复
    
    
    s={1,2} # s=set({1,2})
    
    #s={1,[1,2]}                        # 报错,集合内元素必须为不可变类型
    s={1,'a','z','b',4,7}               # 集合内元素无序
    print(s)                            # {1, 4, 7, 'b', 'z', 'a'}
    
    s={1,1,1,1,1,1,'a','b'}             # 集合内元素没有重复
    print(s)                            # {'b', 1, 'a'}
    
    # 了解
    s={}                                # 默认是空字典
    print(type(s))                      # <class 'dict'>
    # 定义空集合
    s=set()
    print(s,type(s))                    # set() <class 'set'>

    1.4 类型转换

    res=set('hellolllll')
    print(res)                          # {'o', 'l', 'h', 'e'}
    
    # print(set([1,1,1,1,1,1]))
    # print(set([1,1,1,1,1,1,[11,222]]) # 报错
    
    print(set({'k1':1,'k2':2}))         # {'k1', 'k2'}
    
    

    2、内置方法

    关系运算符

    friends1 = {"zero","kevin","jason","egon"}
    friends2 = {"Jy","ricky","jason","egon"}
    
    # 2.1 取交集:两者共同的好友
    res=friends1 & friends2             # {'egon', 'jason'}
    print(res)
    print(friends1.intersection(friends2))
    
    # 2.2 取并集/合集:两者所有的好友
    print(friends1 | friends2)          # {'ricky', 'kevin', 'Jy', 'jason', 'egon', 'zero'}
    print(friends1.union(friends2))
    
    # 2.3 取差集:取friends1独有的好友
    print(friends1 - friends2)          # {'zero', 'kevin'}
    print(friends1.difference(friends2))
    
    # 取friends2独有的好友
    print(friends2 - friends1)          # {'Jy', 'ricky'}
    print(friends2.difference(friends1))
    
    # 2.4 对称差集: 求两个用户独有的好友们(即去掉共有的好友)
    print(friends1 ^ friends2)          # {'Jy', 'zero', 'kevin', 'ricky'}
    print(friends1.symmetric_difference(friends2))
    
    # 2.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)
    
    
    l=[
        {'name':'lili','age':18,'sex':'male'},
        {'name':'jack','age':73,'sex':'male'},
        {'name':'tom','age':20,'sex':'female'},
        {'name':'lili','age':18,'sex':'male'},
        {'name':'lili','age':18,'sex':'male'},
    ]
    new_l=[]
    for dic in l:
        if dic not in new_l:
            new_l.append(dic)
    
    print(new_l)

    3、其他操作

    '''
    # 1.长度
    >>> s={'a','b','c'}
    >>> len(s)
    3
    
    # 2.成员运算
    >>> 'c' in s
    True
    
    # 3.循环
    >>> for item in s:
    ...     print(item)
    ... 
    c
    a
    b
    '''
    
    # 其他内置方法
    s={1,2,3}
    # 需要掌握的内置方法1:discard
    s.discard(4)                        # 删除元素不存在do nothing
    print(s)
    #s.remove(4)                         # 删除元素不存在则报错
    
    
    # 需要掌握的内置方法2:update
    s.update({1,3,5})
    print(s)                            # {1, 2, 3, 5}
    
    # 需要掌握的内置方法3:pop
    res=s.pop()
    print(res)                          # 随机弹出
    
    # 需要掌握的内置方法4:add
    s.add(4)
    print(s)                            # 加入元素
    
    
    
    # 其余方法全为了解
    res=s.isdisjoint({3,4,5,6})         # 两个集合完全独立、没有共同部分,返回True
    print(res)
    
    # 了解
    s.difference_update({3,4,5})        # s=s.difference({3,4,5})
    print(s)
  • 相关阅读:
    不要在股市上浪费时间(够深刻,耽误自己真本事的提高,即使是价值投资也不值得去做)
    在公司里混日子最终伤害的是你自己
    天使投资人的作用
    115太酷了,居然出了个TV版客户端
    QWidget与HWND的互相转换
    Ubuntu12.10 下搭建基于KVM-QEMU的虚拟机环境(十五)
    QString的不常见用法
    不要神话创业,什么东西都可以自己做,损失就是不拿工资。如果吃不上饭了,那还是不要创业。服务器很便宜
    C++的try catch到底能防止什么错误?
    迷茫的时候,就随机择一去学,时间不要浪费在选择上了
  • 原文地址:https://www.cnblogs.com/zhubincheng/p/12390869.html
Copyright © 2011-2022 走看看