• Python编程中的数据结构


    3.1  Python中的索引和切片

    3.1.1  Python中的索引

    ◆索引:我们可以直接使用索引来访问序列中的元素,同时索引可分为正向和负向两种,而切片也会用到索引。支持字符串(String)、列表(List)、元组(Tuple)【不可变】,但不支持集合和字典【可变】。

    ◆序列:包括字符串(String)、列表(List)、元组(Tuple)、集合和字典。

    下面放上一个图,有助于大家理解正、负向索引的区别,如图所示:

    Ø正向索引取值,例:

    str='python'  print(str[0])#输出p   print(str[3])#输出h

    print(str[6])#报错,索引越界string index out of range

    Ø负向索引取值,例:

    str='python'  print(str[-1])#输出n

    3.1.2  Python中的切片

    ◆切片:指对操作的对象截取其中一部分的操作。字符串、列表、元组都支持切片操作。

    ◆切片的语法:[start_index : end_index : step]

    Østart_index表示起始索引,即索引开始的位置     

    Øend_index表示结束索引,即结束索引的步长。

    Østep表示步长,即表示选取间隔。步长不能为0,且默认值为1

    注意:切片操作是指按照步长,截取从起始索引到结束索引,但不包含结束索引(也就是结束索引减1)的所有元素。

    Python中的切片实例 :   str='python'  

    Øprint(str[0:3])#从索引0开始到第三位结束,不包含第三位,即0,1,2位      print(str[1:3])       print(str[2:-1])

    Øprint (str[:-1])#不设起始索引,默认从0位开始   

    ★切片反转:str='python'   print(str[::-1])#输出nohtyp

    Øprint (str[2:])#不设结束索引,默认取到末尾   

    Øprint (str[1:6:3])#输出yo

    Øprint(str[-1:-5])#步长为正则从左往右取值,结果为空

    print(str[-5:-1])#输出ytho   

    Øprint(str[-1:-5:-1])#从右往左确定数位,步长为负则从右往左取值#输出noht

    Øprint(str[2::-1])#输出typ  print(str[:2:-1])#noh    

    Øprint(str[::-1])#输出nohtyp   print(str[::1])#输出python

    print(str[::-2])#输出结果为nhy

    print(str[::2])#输出结果为pto

    反转输出面试题常遇: 

    print(str[-2:-5:-1])#输出结果为oht

    print(str[-5:-1:-1])#输出结果为空

    3.2  Python中的字符串

    3.2.1  字符串

    Ø字符:指类字形单位或符号,包括字母、数字、运算符号、标点符号和功能性符号以及其它字符,通常由8个二进制位(一个字节)表示一个字符。

    Ø字符串:常用‘str’表示,由一连串字符组成。是Python中最常用的数据类型,用单引号''或者双引号""来创建字符串。

    例:str1 = 'hello Kitty'     str2 = "hello Kitty"

    3.2.2  字符串常用函数

    字符串常用函数定义:表示每个输入值对应唯一输出值的一种对应关系。

    ◆Øcapitalize():使字符串首字母大写

    str1='hello_are_you_ok'    print (str.capitalize())

    Øtitle():使字符串首字母大写

    str1='hello_are_you_ok'      print(str1.title())

    区别:capitalize只有整个字符串的第一个字母大写,title作用于整个字符串内的单词的首字母大写。

    ◆lower():将字符串中所有字母转换为小写字母输出

    str='ADFASDF'  print (str.lower())#输出adfasdf

    ◆upper():将字符串中的所有字符转换为大写字母输出

    str='AsWRsdfsdfDSF'  print (str.upper())#输出ASWRSDFSDFDSF

    ◆count():统计具体字符出现的次数

    str = 'abcad'       print (str.count('a'))

    ◆join():把集合中的字符按自定义的分隔符连接在一起

         str ="abcad"        print ('-'.join(str))#输出a-b-c-a-d

    ◆split():把字符串通过指定的标识符进行分割

        str ="abcad"   print (str.split('b'))#指定分隔符存在时,去掉分隔符,剩下元素保留并转化为一个列表。如['a', 'cad']

    print (str.split('*'))#指定分隔符不存在时,所有元素转化成一个列表。如:['abcad']

    Ø例:把hello_python转化为HelloPython.

    方法1:str='helo_python'       方法2:s='helo_python'
    st=str.title()               s1=s.title().split('_')
    s=st.split('_')              print(s1[0]+s1[1])
    print(s[0]+s[1])

    #输出HeloPython

    ◆strip(ab):删除字符串开头和结尾有a或b的字符

    str ="abcad"  print (str.strip('ab'))#输出cad

    str ="abcad"  print (str.strip('ac'))#输出bcad

    str ="abcad"  print (str.strip('ad'))#输出bc

    lstrip(ab):删除字符串开头有ab序列字符

    str ="abcad"  print (str.lstrip('a'))

    #输出bcad

    ◆rstrip(ab):删除字符串结尾有ab序列字符

    Østr ="abcad"  print (str.rstrip('d'))#输出abca

    Øs="abc_abc_abc_abc"print(s.lstrip('ac'))#bc_abc_abc_abc

    Øprint(s.rstrip('acb'))#输出abc_abc_abc_

    ◆startswith():判断字符串是否以什么开始

    str ="abcad"  print (str.startswith('a'))

    #这里输出结果为true或false

    ◆endswith():判断字符串是否以什么结束

    Østr ="abcad"     print (str.endswith('d'))

    #这里输出结果为true或false

    Ø例:nasa=input('请上传正确的文件:')
    if nasa.endswith('.txt'):
        print('上传成功')
    else:
        print('上传失败')

    ◆find()/rfind():字符串查询find()是从左边开始查,rfind()是从右边开始查,确定元素后,最终下标结果依据正向索引显示

    python 编程基础课程icon-default.png?t=M7J4https://edu.csdn.net/course/detail/36170

    str1 ="duoguladuo.test"    print (str1.find("o"))#输出2
    print (str1.rfind("o"))#输出9 print (str1.rfind("l"))#输出5

    ◆replace():replace(substring,newstring,max) substring表示被替换的字符串,newstring要替换字符串,max表示替换的次数

    str2='duoguladuo.test'   Øprint(str2.replace('g','t'))#duotuladuo.test

    Øprint(str2.replace('g','t',2))#duotuladuo.test#替换两个前往后
    Øprint(str2.replace('o','s'))#替换次数不填,默认替换全部#dusguladus.test
    Øprint(str2.replace('o','s',1))#dusguladuo.test

    ◆isdigit():判断字符串中是否全为数字

    str='abcd'     print (str.isdigit())

    ◆isalpha():判断字符串中是否全为字母

    str='abcd'      print (str.isalpha())

    ◆isalnum():判断字符串当中是否全都为数字,全为字母,或者数字字母组合。返回布尔值:True和False 如果有特殊符号就是否

    str='1234aa@#$'     print (str.isalnum())

    ◆istitle():判断字符串中首字母是否为大写,其他是否为小写,其他不为小写则为否

    Østr='PyThon'    print(str.istitle())#输出False

    Østr='Python'    print(str.istitle())#输出True

    ◆isupper()/islower():is开头的就是判断一个字符串是否展示为都是大写或者都是小写

    Østr.isupper() 是否全大写      Østr.islower()是否全小写

    3.3  Python中的列表

    3.3.1  Python中的列表定义

    ◆列表(list):是一组有序存储的数据,也是python常见的序列之一,序列中的每个元素都分配一个索引,第一个元素索引是0,第二个元素索引是1,依此类推。序列都可以进行的操作包括索引,切片,加,乘,检查成员。

    ◆列表表达符号:[]          查看列表类型:print(type(表名))

    ◆定义列表的方法:

    Ø方法一:list1 = [1,2,3,4] #直接通过[]进行定义

    Ø方法二:list2 = list('1234') #使用list()方法进行定义

    3.3.2  列表中对应的函数

    ◆索引和切片赋值

    list1 = [1,88,'test','duoceshi']    list1[0] = 666

    list1[2:] = list('123')

    Ø例(索引赋值):str='password'  dj=list(str)  dj[0]='PW'   print(dj)#输出['PW', 'a', 's', 's', 'w', 'o', 'r', 'd']

    Ø例(切片赋值):dj=['PW', 'a', 's', 's', 'w', 'o', 'r', 'd']
    dj[0:1]='MN'     print(dj)

    #输出['M', 'N', 'a', 's', 's', 'w', 'o', 'r', 'd']

    Ødj=['PW', 'a', 's', 's', 'w', 'o', 'r', 'd']  dj[2:]=list('MN')(或dj[2:]='MN')   print(dj)#输出['PW', 'a', 'M', 'N']

    ◆append函数:添加一个元素

    list1 = [1,2,3,4]   list1.append('duoceshi')   print (list1)

    ◆extend函数:连接两个列表

    list1=[1,2,3,4,5]   list2 =[6,7,8]    list1.extend(list2)

    print(list1) #输出[1, 2, 3, 4, 5, 6, 7, 8]

    ★注意:

    Øextend与append方法的相似之处在于都是将新接收到参数放置到已有列表的后面。

    Øappend方法可以接收任意数据类型的参数,并且追加到list尾部;Øextend方法一般和列表还有字符串进行拼接,不能与int进行拼接。

    ◆insert(index,value)函数:在指定位置插入一条数据

    list1 = [1,2,3,4]  list1.insert(0,'test') print(list1)

    #输出['test', 1, 2, 3, 4]

    ◆remove函数:移除元素

    list1 = [1,2,3,4,1]     list1.remove(1)#输出[2,3,4,1]

    ★注:如果列表中有多个相同的元素,会删除前面那个

    ◆del函数:索引删除值

    list1 = [1,2,3,4]      del list1[0] #输出[2,3,4]

    ◆index函数:在列表中查找元素所对应的索引值

    list1 = [1,2,3,4]    print(list1.index(1))#输出0

    ◆sort函数:实现列表的排列

    list1 = [1,2,3,4,1]   list1.sort()   print(list1)

    python 编程基础课程icon-default.png?t=M7J4https://edu.csdn.net/course/detail/36170

    #输出[1, 1, 2, 3, 4]

    ◆sorted函数:实现列表的降序排列

    list1 = [1,2,3,4,1]   Øprint(sorted(list1,reverse=True))#输出[4, 3, 2, 1, 1]降序排序

    Øprint(sorted(list1,reverse=False))#输出[1, 1, 2, 3, 4]升序排序

    reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)

    ★sort 与 sorted 区别:

    Øsort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。

    Ølist 的 sort 方法返回的是对已经存在的列表进行操作,无返回值,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。

    ◆reverse函数:列表元素反转 

    list1 = [1,2,3,4]     list1.reverse()     print(list1)

    #输出[4, 3, 2, 1]

    ◆pop函数:

    list1 = [1,2,3,4]  print(list1.pop(2))#输出3

    Print(list1.pop())#输出4

     Ø默认移除列表最后一个元素,并返回元素的值

     Ø移除指定位置的元素list1.pop(0)表示移除第一个元素

     Ø在列表中pop函数是唯一一个既能改变列表元素又有返回值

    ◆列表中文打印乱码解决方法

    a = [1,2,3,"中国"]    print (str(a).decode('string_escape'))

     Ødecode():指定编码格式

     Ø★string-escape:编码格式,能解决因为被\转义的问题

    3.4  Python中的元组

     3.4.1  Python中的元组定义

    元组(tuple):是Python中常用的一种数据结构。元组由不同的元素组成,每个元素可以存储不同类型的数据,如字符串、数字、甚至元组。元组是'写保护'的,即元组中元素作为一个整体,创建后不能再做任何修改操作。

    ◆元组表达符为:()

    ◆元组的定义:tuple1=(1,2,3)

    ★注意:当元组只有一个元素时,后面要加逗号,如:tuple1=(1,)

     3.4.2  元组中常见的操作

    ◆元组与列表呼出方式类似  

    turple1=('a','b','c','d')   print(tuple[0])

    ◆元组转换为列表

    tuple1 = ('a','b','c','d')   list1=list(tuple1)

    print(list1,type(list1))

    ◆列表转换为元组

    list1=[1,2,3,4]            tuple1=tuple(list1) print(tuple1,type(tuple1))

    ◆元组中的值是不可以直接改变的

    tuple1=('a','b','c')     tuple1.insert(0,'d')

    print(tuple1)

    ◆元组中的值是可以间接来改变

    Øtuple1 = ('a', 'b', 'c', 'd')    list1 = list(tuple1) #先改成列表       list1[1] = 'test' #通过列表改值

    tuple1 = tuple(list1) #在转换成元组    print(tuple1)

    ★商汤科技面试题:

    1>元组可以被改变吗?

    当元组的元素作为一个整体时是不可以改变的,但是可以间接进行修改。首先把元组转换为列表,再进行修改元素,修改后再转换成元组

    2>元组和列表的区别?

    Ø定义符不一样.元组是(),列表是[],list表示列表,tuple表示元组

    Ø元组是不能被修改的,列表是可以被修改的

    Ø元组用于储存异构数据。即当做一个没有字段名的记录来使用,比如用元组来记录一个人的身高、体重、年龄信息,记录形式为:

    person=(‘zhangsan’,180,80,20)

    list[‘香蕉’,‘苹果’,‘猕猴桃’]

    Ø元组是不可变类型,大小固定,列表是可变数据类型,数据可以动态变化,所以在内存占用方面,同样大小的数据,元组占用内存更少

    3>如何修改列表里的元素

    List=[1,2,3,4,5,6]#定义一个列表   list[0]=9#通过索引的方式把要修改的元素取出并进行赋值。以及通过一些列表函数修改元素   print(list)

    4>如何修改元组中列表里的元素,比如把大娃改成大总

    tuple=('董事长','总经理','合伙人',['大娃','二娃','三娃','四娃'])
    tuple[3][0]='大总'     print(tuple)#输出('董事长', '总经理', '合伙人', ['大总', '二娃', '三娃', '四娃'])

    3.4.3元组和列表的区别

    ★相同:  Ø都是序列类型的容器对象,可以存放任何类型的数据

            Ø支持切片、迭代等操作

    ★不同:  Ølist 是可变的对象,元组tuple是不可变的对象

            Øtuple不可变,所以使用tuple可以使代码更安全

    3.5  Python中的字典和集合

    3.5.1  Python中的字典定义

    字典(dict):是另一种可变容器模型,且可存储任意类型对象。存放一系列具有映射关系的数据结构,字典是无序的,是以key:value的形式存储数据

    ◆字典的每个键值key:value对用冒号:分割,每个键值对之间用逗号分割,整个字典包括在大括号{}中

    ◆字典同时是无序,字典都是以键值对的形式存在,先键后值,键是唯一的,值且不唯一

    ◆字典表达符:{}

    ◆字典的定义方式:

     Ø法一:dict1={'name':'dishini','age':18} #通过{}直接定义

     Ø法二:list = [('a',1),('b',2),('c',3)] dict2 = dict(list) #通过dict()方法定义

    取值:通过key取value,例:dict==dict(list)  print(dict)

    3.5.2  字典中常见的函数

    ◆添加一个键值对

    Ødict1 = {"name":"xiaowang","age":"10"}

    dict1['class']=1834 如果字典里已经有这个键,旧数据将会替换

    print(dict1)

    Ø#设置键绝对setdefault 类似添加
    dict={'name':'zhangsan','age':18}

    dict.setdefault('sex','男')  print(dict)

    #输出{'name': 'zhangsan', 'age': 18, 'sex': '男'}
    Ø#如果字典存在键时,此时设置键值无效
    dict.setdefault('sex','女')      print(dict)

    #输出{'name': 'zhangsan', 'age': 18, 'sex': '男'}

    ◆字典添加元素setdefault()

    dict1 = {'name':xiaowang,'age':18}

    dict1.setdefault('sex','1')

    print (dict1)

    注:如果插入数据键已经在字典里,插入是不生效的,默认值为空时,插入数据为None

    ◆del删除字典

    dict1 ={"name":"xiaowang","age":"18","sex":"1"}

    del (dict1)

    print(dict1)

    ◆取出键返回列表

    dict1 = {"name":"xiaowang","age":"10"}

    print (dict1.keys())

    dict1 = {"name":"xiaowang","age":"10"}

    print(key)  或

                      for i in dict.keys()     #key存到i中

    print(i)

    ◆取出值返回列表

    dict1 = {"name":"xiaowang","age":"10"}

    print (dict1.values())

    ◆取出具体键的值

     Ødict1 = {"name":"xiaowang","age":"10"}

    print (dict1['name'])

    Ø取出具体的键以及对应键的值

    dict={'name':'zhangsan','age':18}
    for key in dict:
        print(key,dict[key])#打印字典的键以及对应的值

    #输出name zhangsan   age 18

    Ø取出具体的键以及对应键的值,并以列表形式返回

    dict={'name':'zhangsan','age':18,'sex':'男'}
    for i,j in dict.items():          print(i,j)

    #输出name zhangsan

    age 18

    sex 男

    ◆del删除指定的键,连同值也删除

    dict1 ={"name":"xiaowang","age":"18","sex":"1"}

    del (dict1["name"])

    print (dict1)

    ◆pop(key)函数,删除指定键并返回该指定键被删除的值

    dict = {'name': 'zhangsan', 'age': 18, 'sex': '男'}
    print(dict.pop('name'))#输出zhangsan

    ◆clear()清空字典所有项

    dict = {'name': 'zhangsan', 'age': 18, 'sex': '男'}

    dict.clear()     print (dict)

    或print(dict.clear())#输出None

    再打印print(dict)#输出{}

    ◆get(key)方法,通过key获取值,当键不存在,返回None(接口测试常用)

    dict = {'name': 'zhangsan', 'age': 18, 'sex': '男'}
    print(dict.get('age'))#输出18

    ◆fromkeys  函数初始化,函数可以给具体的键指定值

    dict={}.fromkeys(['name','age'])#初始化字典,不指定,值默认
    print(dict)#输出{'name': None, 'age': None}
    dict['name']='老六'#指定值
    print(dict)#输出{'name': '老六', 'age': None}

    ◆has_key函数或__contains__函数检查字典是否有指定的键,有返回True,没有返回False

    Ødict = {'name': 'zhangsan', 'age': 18, 'sex': '男'}
    print(dict.__contains__('name')) #返回true,因为键存在

    Ø★dict = {'name': 'zhangsan', 'age': 18, 'sex': '男'}
    if dict.__contains__('nasa'):
        print('存在此键')
    else:
        dict.setdefault('nasa','masike')
    print(dict)

    #输出{'name': 'zhangsan', 'age': 18, 'sex': '男', 'nasa': 'masike'}

    ◆popitem函数随机返回并删除字典中的键值对(一般删除末尾对)

    如果字典已经为空,却调用了此方法,就报出KeyError异常

    dict1 = {'name':xiaowang,'age':18,'class':24}

    dict1.popitem()

    print (dict1)#输出{'name': 'zhangsan', 'age': 18}

    print (dict1.popitem())#输出('sex', '男')

    print (dict1)#输出{'name': 'zhangsan', 'age': 18}

    ◆update函数利用一个字典更新另外一个字典
    dict = {'name': 'zhangsan', 'age': 18, 'sex': '男'}
    dict1={'class':1832}
    dict.update(dict1)
    print(dict)#输出{'name': 'zhangsan', 'age': 18, 'sex': '男', 'class': 1832}

    ★注意:如果要更新的元素项在原字典里存在,则把原来的项覆盖

    dict = {'name': 'zhangsan', 'age': 18, 'sex': '男'}
    dict1={'age':1832}
    dict.update(dict1)
    print(dict)#输出{'name': 'zhangsan', 'age': 1832, 'sex': '男'}

    ◆字典的遍历:for...in...遍历字典

    dict1 = {'name':xiaowang,'age':18}

    for key in dict1:

    print (key,dict1[key])

    ◆使用items()完成遍历,取键和值

    dict1= {'name':xiaowang,'age':18}

    for key,value in dict1.items():

    print (key,value)

    3.5.3  Python中的集合

    ◆集合:最重要的功能就是去重

     Ø可变集合set

    set1.add('dcs')

    set1.remove('dcs')  

    →test='hello'
    m=set(test)
    print(m)#输出{'h', 'e', 'l', 'o'}
    print(type(m))#输出

    m.clear()#清空
    print(m)#输出set()

    m.pop()
    print(m)#输出{'e', 'o', 'l'}#把集合最前面这个给删除了

    →list1 = [1,88,8,6,'hello']
    list1.pop()
    print(list1)#输出[1, 88, 8, 6]#把列表最后面这个给删除了

    【拓】str='七夕节快乐'

    for i in str:
         print(i,end='')#输出七夕节快乐

     Ø不可变集合frozenset

    test = 'hello'

    a = frozenset(test)

    b = a.copy()

    b.add('888') #报错AttributeError: 'frozenset' object has no attribute 'add'

    print (b)

     python 编程基础课程icon-default.png?t=M7J4https://edu.csdn.net/course/detail/36170

  • 相关阅读:
    控制输入框弹出弹窗 和不弹出窗口
    Nodejs+vue高校机房设备管理系统jt07u
    PHP 行事准则:allow_url_fopen 与 allow_url_include
    二叉树的详细实现(含递归展开图)
    通讯网关软件024——利用CommGate X2Access实现Modbus TCP数据转储Access
    【MySQL系列】 MySQL表的增删改查(进阶)
    JVM学习-自动内存管理
    python字典中添加、修改数据、删除数据和遍历数据、enumerate函数和公共方法
    centos 7 新特性之systemd
    js中运算规则
  • 原文地址:https://blog.csdn.net/m0_37449634/article/details/126719965