zoukankan      html  css  js  c++  java
  • Python学习【第2篇】:Python数据结构

    1.可变数据类型:列表和字典是可变类型,但是字典中的key值必须是不可变类型)

    2.不可变数据类型:数字,字符串,布尔类型,都是不可类型

    数字类型

    1.bin()函数将十进制转换成而进制

    2.oct()函数将十进制转换成八进制

    3.hex()函数将十进制转换成十六进制     

        十六进制表示:0-9 a b c d e f

    4.数字类型的特性:    

        只能存放一个值  

        一经定义,不可更改

         直接访问

    分类:整型,布尔,浮点,复数

    字符串类型

    1.字符串类型

            判断类型type()

      引号包含的都是字符串类型

        S1='hello world'  s="hello world"

        s2="""hello world"""  

        s3='''hello world'''  

      单引双引没有区别

    2.字符串是字符的序列

           字符串是若干字符的序列。

           Python中,索引是从字符串头部算起的一个偏移量,第一个字母的偏移量为0

           a='abcd'

            a[0] 

    • [:] 提取从开头(默认位置0)到结尾(默认位置-1)的整个字符串
    •  [start:] 从start 提取到结尾
    •  [:end] 从开头提取到end - 1
    •  [start:end] 从start 提取到end - 1
    •  [start:end:step] 从start 提取到end - 1,每step 个字符提取一个
    •  左侧第一个字符的位置/偏移量为0,右侧最后一个字符的位置/偏移量为-1

    6.字符串的常用操作  

           in 判断一个字符串是否在另一个字符串中

      strip()移除空白,也可以去除其他的字符

      s.lstrip(rm) 删除s字符串中开头处,位于 rm删除序列的字符

      s.rstrip(rm) 删除s字符串中结尾处,位于 rm删除序列的字符

      slipt()分割,默认以空格分割。也可以以其他的字符分割  

      s='tom,21'

      print s.split(',')

      name,age=s.split(',')

      len()长度  

            切片:如print(x[1:3])也是顾头不顾尾   print(x[0:5:2])#0 2 4

      capitalize()首字母大写

       center()居中显示例如:x='hello'  print(x.center(30,'#'))

       count():计数,顾头不顾尾,统计某个字符的个数,空格也算一个字符  

      endswith()以什么结尾

       satrtswith()以什么开头

       find()查找字符的索引位置,如果是负数,代表查找失败   

      index()索引  

      find()和index()的区别,如下图:

          

      方法1

      a=1

      b=2

      print 'a=%s'% a

      print 'a = %d,b = %s'%(a,b)

      print 'a = %20d,b = %s'%(a,b)

      print '= %.8f,= %s'%(a,b)

      方法2

      format()字符串格式化    

         1.msg='name:{},age:{},sex:{}'           

            print(msg.format('haiyan',18,女))  

          2.msg='name:{0},age:{1},sex:{0}'     

         print(msg.format('aaaaaa','bbbbbb'))    

        3.msg='name:{x},age:{y,sex:{z}'     

         print(msg.format(x='haiyan',y='18',z='女'))  

      isdigit()判断是否是数字

       islower()判断是否是全部小写

       isupper()判断是否是全部大写

       lower()全部转换为小写

       upper()全部转换为大写

       isspace()判断是否是全都是空格

       istitle()判断是否是标题(首字母大写)  

      swapcase()大小写字母翻转

       join()连接  +'.join(['a','b','c'])    print '+'.join(['a','b','c'])    print '/'.join('abc')

       repalce()替换   

         msg='hello alex'   

         print(msg.replace('e'),'A',1)  

         print(msg.replace('e'),'A',2)

       ljust()左对齐   

         X='ABC'    print(x.ljust(10,'*'))

    列表

    ist 是有序集合

    一、创建一个列表

    list1 = ["a", "b", "c", "d"];

    二、访问列表中的值 用索引来访问list中每一个位置的元素,记得索引是从0开始的

    list1 = ['physics', 'chemistry', 1997, 2000];

    print "list1[0] print "list1[1:3]


    三、更新列表

    你可以对列表的数据项进行修改或更新,你也可以使用append()方法来添加列表项,

    l= ['physics', 'chemistry', 1997, 2000];

    l[2] = 2001;

    l.insert(1, 'Jack')

    l.appent(2)

    四、删除列表元素

    要删除list末尾的元素,用pop()方法

    list1 = ['physics', 'chemistry', 1997, 2000];

    list1.pop()

    要删除指定位置的元素,用pop(i)方法,其中i是索引位置

    list1.pop(0)


    五、Python列表脚本操作符

    列表对 + * 的操作符与字符串相似。+ 号用于组合列表,* 号用于重复列表。

    listt里面的元素的数据类型也可以不同

    s = ['python', True, ['asp', 'php'], 1]

    六、Python列表截取


    序列:(三种类型) 

    字符串   不可以修改 

    列表list []  可以修改  

    元组tuple ()  不可以修改

    ----特点: 

    1.可以进行索引,索引为负数,则从右边开始计数 

    2.可以使用切片操作符 [m:n] 

    for in : 

    forvarinlist #遍历一个列表valueincollection #测试集合中是否存在一个值


    七、Python列表操作的函数和方法

    列表操作包含以下函数:

    1cmp(list1, list2):比较两个列表的元素

    2len(list):列表元素个数

    3max(list):返回列表元素最大值

    4min(list):返回列表元素最小值

    5list(seq):将元组转换为列表

    列表操作包含以下方法:

    1list.append(obj):在列表末尾添加新的对象

    2list.count(obj):统计某个元素在列表中出现的次数

    3list.extend(seq):在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)

    4list.index(obj):从列表中找出某个值第一个匹配项的索引位置

    5list.insert(index, obj):将对象插入列表

    6list.pop(obj=list[-1]):移除列表中的一个元素(默认最后一个元素),并且返回该元素的值

    7list.remove(obj):移除列表中某个值的第一个匹配项

    8list.reverse():反向列表中元素

    9list.sort([func]):对原列表进行排序

    列表去重复

    方法1

    ids = [1,2,3,3,4,2,3,4,5,6,1]

    newids=[]

    for i in ids:

    if i not in newids:

    newids.append(i)

    print newids

    方法2

    ids = [1,2,3,3,4,2,3,4,5,6,1]

    c=set(ids)

    print list(c)


    以下是列表的常用操作:

    l=[1,2,3] #l=list([1,2,3])
    # print(type(l))
    
    #pat1===》优先掌握部分
    #  索引:l=[1,2,3,4,5]
          print(l[0])  7 #  切片
    l=['a','b','c','d','e','f']
    
    # print(l[1:5])
    # print(l[1:5:2])
    # print(l[2:5])
    # print(l[-1])
    
    
    #了解
    # print(l[-1:-4])
    # print(l[-4:])
    # l=['a','b','c','d','e','f']
    # print(l[-2:])
    
    #   追加
    # hobbies=['play','eat','sleep','study']
    # hobbies.append('girls')
    # print(hobbies)
    
    #   删除
    hobbies=['play','eat','sleep','study']
    # x=hobbies.pop(1) #不是单纯的删除,是删除并且把删除的元素返回,我们可以用一个变量名去接收该返回值
    # print(x)
    # print(hobbies)
    
    # x=hobbies.pop(0)
    # print(x)
    #
    # x=hobbies.pop(0)
    # print(x)
    
    #队列:先进先出
    queue_l=[]
    #入队
    # queue_l.append('first')
    # queue_l.append('second')
    # queue_l.append('third')
    # print(queue_l)
    #出队
    # print(queue_l.pop(0))
    # print(queue_l.pop(0))
    # print(queue_l.pop(0))
    
    
    #堆栈:先进后出,后进先出
    # l=[]
    # #入栈
    # l.append('first')
    # l.append('second')
    # l.append('third')
    # #出栈
    # print(l)
    # print(l.pop())
    # print(l.pop())
    # print(l.pop())
    
    #了解
    # del hobbies[1] #单纯的删除
    # hobbies.remove('eat') #单纯的删除,并且是指定元素去删除
    
    
    #   长度
    # hobbies=['play','eat','sleep','study']
    # print(len(hobbies))
    
    #   包含in
    # hobbies=['play','eat','sleep','study']
    # print('sleep' in hobbies)
    
    # msg='hello world egon'
    # print('egon' in msg)
    
    
    ##pat2===》掌握部分
    hobbies=['play','eat','sleep','study','eat','eat']
    # hobbies.insert(1,'walk')
    # hobbies.insert(1,['walk1','walk2','walk3'])
    # print(hobbies)
    
    # print(hobbies.count('eat'))
    # print(hobbies)
    # hobbies.extend(['walk1','walk2','walk3'])
    # print(hobbies)
    
    hobbies=['play','eat','sleep','study','eat','eat']
    # print(hobbies.index('eat'))
    
    
    #pat3===》了解部分
    hobbies=['play','eat','sleep','study','eat','eat']
    # hobbies.clear()
    # print(hobbies)
    
    # l=hobbies.copy()
    # print(l)
    
    # l=[1,2,3,4,5]
    # l.reverse()
    # print(l)
    
    l=[100,9,-2,11,32]
    l.sort(reverse=True)
    print(l)

    tuple

    另一种有序列表叫元组:tupletuplelist非常类似,但是tuple一旦初始化就不能修改


    Python在显示只有1个元素的tuple时,也会加一个逗号,,以免你误解成数学计算意义上的括号

    t = (1,)

     

    #为何要有元组,存放多个值,元组不可变,更多的是用来做查询
    t=(1,[1,3],'sss',(1,2)) #t=tuple((1,[1,3],'sss',(1,2)))
    # print(type(t))
    
    
    # #元组可以作为字典的key
    # d={(1,2,3):'egon'}
    # print(d,type(d),d[(1,2,3)])
    
     
    
    
    #     切片
    # goods=('iphone','lenovo','sanxing','suoyi')
    # print(goods[1:3])
    
    
    
    #     长度
    
    #in:
    #字符串:子字符串
    #列表:元素
    #元组:元素
    #字典:key
    
    # goods=('iphone','lenovo','sanxing','suoyi')
    # print('iphone' in goods)看的是里面的元素在不在里面
    
    # d={'a':1,'b':2,'c':3}
    # print('b' in d) 看的是key在不在d里面
    
     
    
    #掌握
    # goods=('iphone','lenovo','sanxing','suoyi')
    # print(goods.index('iphone'))
    # print(goods.count('iphone'))
    
    
    #补充:元组本身是不可变的,但是内部的元素可以是可变类型
    t=(1,['a','b'],'sss',(1,2)) #t=tuple((1,[1,3],'sss',(1,2)))
    
    # t[1][0]='A'
    # print(t)
    # t[1]='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
    元组示例

     

    python中列表,元组,字符串如何互相转换

    1. strlist

    list = list(str)


    2. liststr

    str= ''.join(list)


    3. tuple list相互转换 元组不能修改,列表可以修改

    tuple=tuple(list)

    list=list(tuple)


    dict

    Python内置了字典:dict的支持在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度

    列表也是序列,字符串也是序列

    字典

    字典类型与序列类型的区别:

    1.存取和访问数据的方式不同。

    2.序列只能用整数做为索引;

    3.字典中索引几乎可以是任意类型

    4.映射类型中的数据是无序排列的、字典中的键必须是唯一的,而值可以不唯一

    注意:如果字典中的值为数字,最好使用字符串数字形式,如:'age':'040′ 而不用 ‘age':040

    1.创建一个字典

    d = {} 空字典

    dict1={“name”:”jiamingqiang”,tel:”132567890345”,”sex”:”man”}

    2.返回字典的长度 len(dict1)

    3.添加一项 dict1[“age”]=25

    4.如何获取字典对应Kvalue

    dict1[“name”]

    dict1.get(“name”)

    5.如何获取所有的kyevalues

    dict1.kyes

    dict1.values

    6.poppopitem del

    pop弹出给定key的项的值,然后在字典中删除该项,popitem弹出任意一项

    d.pop(key)

    d.popitem() 删除任意项,因字典是无序的

    del d[key]

    7.判断key是否存在

    key in d

    d.has_key(key)

    a={"name":"2","age":"胡晓燕"}

    if "name" in a:

    print "huxiaoyan"

    if a.has_key("name"):

    print "huxiaoyan"

    遍历字典

    d = {'name':'jia', 'age':'25'}

    for key in d:

    print key

    for key in d.keys():

    print key


    a='abc'

    b='123'

    c=zip(a,b)

    d1=dict(c)

    print d1

    八、使用字典的注意事项

    1、不能允许一键对应多个值;

    2、键必须是可哈希的。

     

    list比较,dict有以下几个特点:

    1. 查找和插入的速度极快,不会随着key的增加而变慢;

    2. 需要占用大量的内存,内存浪费多。

    list相反:

    1. 查找和插入的时间随着元素的增加而增加;

    2. 占用空间小,浪费内存很少。

    set

    set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。

    l=[1,2,3,3]

    s=set(l)

    s.add('4')

    s.remove(1)

     

    字典的表示方法:
    
    info_dic={'name':'haiyna','age':18,'sex':'female'}
    # 常用操作:
    #
    1.存/取
    info_dic={'name':'egon','age':18,'sex':'male'}
      print(info_dic['name11111111'])#找不到则报错了
      print(info_dic.get('name',None))
      print(info_dic.get('name222222',None))#get方法找不到不报错,可以自己设定默认值
    
    #pop:key存在则弹出值,不存在则返回默认值,如果没有默认值则报错
    # print(info_dic.pop('nam123123123123123123e',None))
    # print(info_dic)
    
    # print(info_dic.popitem())
    # print(info_dic)
    
    # info_dic['level']=10
    # print(info_dic)
    
    #
    #     删除
    info_dic={'name':'egon','age':18,'sex':'male'}
    # info_dic.pop()
    # info_dic.popitem()
    
    # del info_dic['name']
    
    
    #
    #     键s,值s,键值对
    info_dic={'name':'egon','age':18,'sex':'male'}
    # print(info_dic.keys())
    # print(info_dic.values())
    # print(info_dic.items())
    
    # for k in info_dic:
    #     # print(k,info_dic[k])
    #     print(k)
    
    # print('========>')
    # for k in info_dic.keys():
    #     print(k)
    
    # for val in info_dic.values():
    #     print(val)
    
    # for k,v in info_dic.items(): #k,v=('name', 'egon')
    #     print(k,v)
    
    
    
    #     长度
    # info_dic={'name':'egon','age':18,'sex':'male'}
    # print(len(info_dic))
    #
    #     循环
    #
    #     包含in
    
    # info_dic={'name':'egon','age':18,'sex':'male'}
    # print('name' in info_dic)
    # print('name' in info_dic.keys())
    # print('egon' in info_dic.values())
    # print(('name','egon') in info_dic.items())
    
    
    
    #掌握
    info_dic={'name':'egon','age':18,'sex':'male'}
    # info_dic.update({'a':1,'name':'Egon'})
    # print(info_dic)
    
    # info_dic['hobbies']=[]
    # info_dic['hobbies'].append('study')
    # info_dic['hobbies'].append('read')
    # print(info_dic)
    
    #setdefault:key不存在则设置默认值,并且放回值默认值
    #key存在则不设置默认,并且返回已经有的值
    
    # info_dic.setdefault('hobbies',[1,2])
    # print(info_dic)
    # info_dic.setdefault('hobbies',[1,2,3,4,5])
    # print(info_dic)
    
    # info_dic={'name':'haiyan','age':18,'sex':'male'}
    
    # {'name':'egon','age':18,'sex':'male','hobbies':['study']}
    # info_dic.setdefault('hobbies',[]).append('study')
    
    # {'name':'egon','age':18,'sex':'male','hobbies':['study','read']}
    # info_dic.setdefault('hobbies',[]).append('read')
    
    # {'name':'egon','age':18,'sex':'male','hobbies':['study','read','sleep']}
    # info_dic.setdefault('hobbies',[]).append('sleep')
    # l=info_dic.setdefault('hobbies',[])
    # print(l,id(l))
    # print(id(info_dic['hobbies']))
    
    # print(info_dic)
    
    
    
    #了解
    # d=info_dic.copy()
    # print(d)
    # info_dic.clear()
    # print(info_dic)
    
    
    # d=info_dic.fromkeys(('name','age','sex'),None)
    # print(d)
    # d1=dict.fromkeys(('name','age','sex'),None)
    # d2=dict.fromkeys(('name','age','sex'),('egon',18,'male'))
    # print(d1)
    # print(d2)
    
    
    
    
    # info=dict(name='haiyan',age=18,sex='male')
    # print(info)
    
    #
    # info=dict([('name','haiyan'),('age',18)])
    # print(info)
    字典示例

     

    一、集合的作用

       知识点回顾:可变类型是不可hash类型,不可变类型是可hash类型

        作用:去重,关系运算

        定义:可以包含多个元素,用逗号分割,集合的元素遵循三个原则:

          1.每个元素必须是不可变类型(可hash,可作为字典的key)

          2.没有重复的元素

          4.无序

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

    二、常用方法

        in 和 not in

        |并集(print(pythons.union(linuxs)))

        &交集(print(pythons.intersection(linuxs)))

        -差集(print(pythons.difference(linuxs)))

        ^对称差集(print(pythons.symmetric_difference(linuxs)))

        ==

        >,>= ,<,<= 父集(issuperset),子集(issuberset)

    >,>=,<,<= 
    set1={1,2,3,4,5}
    set2={1,2,3,4}
    print(set1 >= set2)
    print(set1.issuperset(set2))
     
     
     
    set1={1,2,3,4,5}
    set2={1,2,3}
    print(set1<=set2)
    print(set1.issubset(set2))

    三、练习

     一.关系运算
      有如下两个集合,pythons是报名python课程的学员名字集合,linuxs是报名linux课程的学员名字集合
      pythons={'alex','egon','yuanhao','wupeiqi','gangdan','biubiu'}
      linuxs={'wupeiqi','oldboy','gangdan'}
      1. 求出即报名python又报名linux课程的学员名字集合
      2. 求出所有报名的学生名字集合
      3. 求出只报名python课程的学员名字
      4. 求出没有同时这两门课程的学员名字集合
    pythons={'haiyan','fank','yaling','lalal','haidong','biubiu'}
    linuxs={'six','wu','dabao'}
    # 1. 求出即报名python又报名linux课程的学员名字集合
        
    pythons={'haiyan','fank','yaling','lalal','haidong','biubiu'}
    linuxs={'six','wu','dabao'}
      print(pythons & linuxs)
    # 2. 求出所有报名的学生名字集合    
    pythons={'haiyan','fank','yaling','lalal','haidong','biubiu'}
    linuxs={'six','wu','dabao'}    
      print(pythons | linuxs)
    # 3. 求出只报名python课程的学员名字    
    pythons={'haiyan','fank','yaling','lalal','haidong','biubiu'}
    linuxs={'six','wu','dabao'}    
    print(pythons - linuxs)
    # 4. 求出没有同时这两门课程的学员名字集合    
    pythons={'haiyan','fank','yaling','lalal','haidong','biubiu'}
    linuxs={'six','wu','dabao'}    
    print(pythons ^ linuxs)
    
      四、方法    
    # ========掌握部分=======    
    linuxs={'six','wu','dabao'}    
    linuxs.add('xiaoxiao')#说明set类型的集合是可变类型
    linuxs.add([1,2,3])#报错,只能添加不可变类型
    print(linuxs)
     
    # 2.
    linuxs={'six','wu','dabao'}    
    res=linuxs.pop() #不用指定参数,随机删除,并且会有返回值
    print(res)
    # 3.
    res=linuxs.remove('wupeiqi')#指定元素删除,元素不存在则报错,单纯的删除,没有返回值,
    print(res)
    # 4.
    res=linuxs.discard('egon1111111111') #指定元素删除,元素不存在不报错,单纯的删除,没有返回值,
     
    # =========了解部分=========
    linuxs={'wupeiqi','egon','susan','hiayan'}
    new_set={'xxx','fenxixi'}
    linuxs.update(new_set)
    print(linuxs)
    linuxs.copy()
    linuxs.clear()
     
    #解压
     
    a,*_={'zzz','sss','xxxx','cccc','vvv','qqq'}
    print(a)
    集合


     

  • 相关阅读:
    Python3中最常用的5种线程锁你会用吗
    学会使用Python的threading模块、掌握并发编程基础
    数据结构与算法Python版 熟悉哈希表,了解Python字典底层实现
    博客导读
    分享canvas的一个小案例
    Php中的魔术方法
    进制简介
    Gojs学习史(一):基本定义
    Vue读书笔记:关于$ref、props和$emit
    Leaflet学习笔记(一)
  • 原文地址:https://www.cnblogs.com/mensiler/p/10369765.html
Copyright © 2011-2022 走看看