美文网首页
核心数据结构之列表与元组

核心数据结构之列表与元组

作者: 互联网中的一个咸鱼 | 来源:发表于2019-08-21 21:26 被阅读0次

    Python中核心数据类型结构分类

    • 序列类型:字符串、列表、元组
    • 泛映射类型:字典
    • 集合:set()

    列表

    1.列表的特性:

    • 列表内的元素是可变的
    • 列表的元素可以是Python的任何数据类型的数据和对象
    • 列表的元素可以出现多次

    2.创建列表

    li=[]    #空列表
    li=['a','b']
    
    list(li)               #list()可以将其他类型转化为列表类型
    string.split()    #split()  将字符串类型转换为列表类型
    

    列表的基本操作

    3.1取值
    li=['a','b',['c','d']]
    li[0]   #结果'a'
    li[2][1]  #结果'd'   因为是嵌套列表,所以这样输出
    
    3.2切片
    li=['a','b',['c','d']]
    li[0:2]   #输出['a','b']   切片之后的数据的类型还是列表类型
    
    3.3 方法
    len(li)           #求出列表长度   适用于所有的序列类型
    len(li)         #3
    
    'a'  in               #判断元素是否在列表内,注意a是字符串,要加上引号,否则会当作变量查找
    print( 'a' in li )   #True
    
    li.append()   #向列表最后位置添加元素
    li.appedn('a')  #li=['a','b',['c','d'],'a']
    
    li.insert(index,str)    #向列表指定位置添加元素
    li.insert(2,'a')        #li=['a','b','a',['c','d']]
    
    extend()            #将另一个序列类型原封不动的添加到列表内
    l1=[1,2,3]
    li.extend(l1)    #li=['a','b',['c','d'],1,2,3]
    
    remove()          #根据指定元素移除列表内的元素,如果发现多个,只会移除第一个
    li.remove('a')  #li=['b',['c','d']]
    
    pop()                 #默认删除列表最后一个位置,并且有返回值,与remove的不同之处
    li.pop()         #li=['a','b']
    
    pop(index)    #移除索引对应的元素
    li.pop(1)    #li=['a',['c','d']]
    
    ''.join(list)     #把列表中的元素拼接起来,返回的是字符串类型
    ''.join(li)     #这样会报错,因为join()拼接的只能是字符号,并且嵌套的也不不可以拼接,可以这样操作
    li.pop()
    ''.join(li)      #返回的是'ab'
    '-'.join(li)     #已指定字符串进行拼接,输出的是'a-b'
    
    li.index()    #返回指定元素的索引位置
    li.index('a')   #返回0
    
    li.count()   #统计值出现的次数
    li.count('a')  #1
    
    li.sort()   #对列表进行排序,只支持全字符或者全数字,并且会改变值的本身
    li=[1,3,2]  
    li.sort()         #li=[1,2,3]
    li.sort(reverse=True)    #对排序进行反转
    
    sorted(li)    #这是一个Python的内置函数,所以要这样使用
    参数可以是任意数据类型的数据,但是类型必须一样,原列表不会发生改变
    

    引用赋值

    1.问题

    a=['1','2','3','4','5']
    b=a
    print(a is b)       #两个列表指向同一个对象,id也完全一样
    
    修改b[0]=3
    会导致a[0]也会等于3      
    这样在生产中,会出现问题
    

    2.初步解决

    使用以下几种方法都可以将一个列表赋值给一个新的对象
    一. 列表的内置函数list.copy()
    二.序列类型函数list(li)
    三列表切片.
    这三种方法都是开辟一个新的内存空间给新的列表,各自之间的id值都会不一样

    深浅拷贝

    li1=['name',['phone',1000]]
    li2=list(li1)
    li3=li1.copy()
    
    这三个列表的id值各不相同
    但是id(li1[1]),id(li2[1]),li3[li3[1]]的三个id都一样,改变任意一个的值,三个都会改变,指向同一个内存
    

    元组

    1 元组特性
    • 元组和列表一样,也是序列类型
    • 唯一不同的是,元组是相对不可变的
    • 相对不可变,可变的是元组内元素的内容,不可变的是元组内元素的内存空间
    2创建元组
    tu=()    #创建空元组
    tu=(3)   #这样创建的并不是元组,只是一个int类型数字
    tu=(3,)  #这样的话才是元组
    
    创建非空元素的元组使用逗号,而不是括号
    tuple()     #将其他序列类型的数据转换为元组
    
    3 使用元组的理由

    给我一个理由

    • 占用内存空间小
    • 元组内的值不会被意外的修改
    • 可作为字典的键
    • 函数的参数是以元组形式传递的
    • 命名元组有时候可以代替类的对象(面向对象的时候用到)

    相关文章

      网友评论

          本文标题:核心数据结构之列表与元组

          本文链接:https://www.haomeiwen.com/subject/hezisctx.html