zoukankan      html  css  js  c++  java
  • Python数据结构之列表

    一,数据结构的概念

    数据结构是通过某种方式组织在一起的数据集合,这些数据元素可以是数字或者字符,甚至可以是其他的数据结构。

    Python中最基本的数据结构是序列(sequence)。序列中的每个元素被分配一个序号——元素位置,称为索引,第一个索引为0,第二个为1,以此类推,最后的索引位为-1.

    二,序列操作

    序列的操作包括:索引,分片,加,乘,检查某个元素是否属于序列成员。Python还可以计算序列长度,找出最大值max()方法,最小值min()方法。同时还可对序列进行迭代iter方法。迭代的意思就是可以对序列中的元素重复执行某些操作。

      1,索引

                  我们可以根据索引的位置来取数据,使用负数时,可以从列表倒序取出数据。

             

    列表的索引
    data=["list","string","dict","tuple"]
    #使用索引取出对应数值,Python默认0位为第一位,所以使用索引1返回列表第二个数值
    print(data[1])
    运行结果为string
    #使用负数取末尾值
    print(data[-1])
    运行结果为tuple

          2,分片

               分片操作可以取出范围内的数据,使用冒号隔开两个索引来进行操作。分片操作有一个很形象的比喻:顾头不顾尾,意思就是我们两个索引位,只包含第一个索引位,第二个索引位不在分片区内

    #列表的分片操作
    data=["list","string","dict","tuple"]
    #分片操作取出前三个数据
    print(data[0:3])
    运行结果:['list', 'string', 'dict']
    #取出全部数据
    print(data[:])
    运行结果:['list', 'string', 'dict', 'tuple']
    #负数取值应注意,左边索引位要比右边索引位小,按从小到大的方式
    print(data[-3:-1])
    运行结果:['string', 'dict']
    #可以使用步长取值
    print(data[0:3:2])
    运行结果:['list', 'dict']
    #倒序取值时,要注意步长应使用负数,且不能为0
    print(data[3:1:-1])
    运行结果:['tuple', 'dict']
    "对于一个正数步长,Python会从头开始向右取值,直到最后一个元素。对于一个负数步长,则是从序列的尾部开始向左取值,直到元素的第一个元素"

         3,序列的加乘操作

              使用加操作可以使两个列表连接到一起,需要注意的是,在使用加操作的时候左右两边的数据必须是同一类型,不同类型的数据不能进行连接操作。

    #列表的连接操作
    data=["list","string","dict","tuple"]
    data1=[0,1,2,3]
    data3="hello world"
    #列表的加操作,连接两个列表、
    print(data+data1)
    运行结果:['list', 'string', 'dict', 'tuple', 0, 1, 2, 3]
    #测试列表可以与不同类型的值相连接
    print(data+data3)
    运行结果:TypeError: can only concatenate list (not "str") to list

    列表的乘操作
    print(data*3)
    运行结果:
    ['list', 'string', 'dict', 'tuple', 'list', 'string', 'dict', 'tuple', 'list', 'string', 'dict', 'tuple']

    三,列表

    1,list函数

    使用list函数可以改变一些数据的数据类型:例如字符串,元组等

    #使用list函数转变数据类型
    data="hello world"
    print(list(data))
    运行结果:
    ['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']

    2,列表元素赋值

    列表的元素赋值使用索引号进行修改,需要注意,我们不能为一个不存在的索引号赋值

    列表的赋值操作
    data=["list","string","dict","tuple"]
    print(data)
    data[-1]="value"
    print(data)
    运行结果
    原列表内容:['list', 'string', 'dict', 'tuple']
    修改后内容:['list', 'string', 'dict', 'value']

     列表元素分片赋值操作,分片操作可以给一个空列表赋值,也可以为列表做分片替换

    #分片赋值
    data=["list","string","dict","tuple","int"]
    data[:2]=["list1","string1"]
    print(data)
    运行结果:
    ['list1', 'string1', 'dict', 'tuple', 'int']
    
    #使用分片赋值的原理,对列表进行删除元素操作
    data=["list","string","dict","tuple","int"]
    #data[:]表示列表所有元素
    data[:]=[]
    print(data)
    运行结果  : []空列表

    2,删除列表元素

    删除列表元素使用del关键字加索引号进行操作,索引号超出列表范围将报错

    #删除列表元素操作,使用del关键字
    data=["list","string","dict","tuple"]
    print(data)
    del data[1]
    print(data)
    运行结果
    原列表内容:['list', 'string', 'dict', 'tuple']
    删除后内容:['list', 'dict', 'tuple']

    3,列表操作

       1,append

      此方法用于别表末尾添加值,它操作后的列表不是一个修改过的新列表(类似拷贝的原理,会有专门内容介绍),而是返回一个修改过的原列表。

    #append方法
    data=["list","string","dict","tuple","int"]
    print(data)
    data.append("float")
    print(data)
    原列表内容:['list', 'string', 'dict', 'tuple', 'int']
    添加后的内容:['list', 'string', 'dict', 'tuple', 'int', 'float']

      2,count

      此方法统计某个元素在列表中出现的次数。

    #count方法
    data=["list","string","dict","tuple","int","int"]
    print(data.count("int"))
    运行结果:
    2

    3.extend

      此方法可以在列表末尾一次性添加另一个序列的多个值,可以扩展原列表,而不是复制出一个新列表

    #extend
    data=["list","string","dict","tuple","int"]
    data2=["list1","string1"]
    print(data)
    data.extend(data2)
    print(data)
    运行结果:
    原data列表:['list', 'string', 'dict', 'tuple', 'int']
    扩展后data列表:['list', 'string', 'dict', 'tuple', 'int', 'list1', 'string1']

      此方法对比列表连接操作的不同,连接操作不会在原有列表上进行扩展,只会创建一个新的列表。

    data=["list","string","dict","tuple","int"]
    data2=["list1","string1"]
    print(data+data2)
    print(data)
    运行结果:
    ['list', 'string', 'dict', 'tuple', 'int', 'list1', 'string1']
    ['list', 'string', 'dict', 'tuple', 'int']
    从结果可以看出,data列表并没有被覆盖,而是创建了一个新列表

    4,index

      index方法用于从列表中查找出某个元素第一次匹配成功后的索引位置

    #index方法
    data=['list', 'string', 'dict', 'tuple', 'int']
    print(data.index("int"))
    运行结果:
    4  返回一个索引位

    5,insert

    insert方法用于将对象插入到列表中,插入位置的值会自动向后移位,在添加新值后,原列表后进行扩展操作,原列表将被覆盖。

    #insert方法
    data=['list', 'string', 'dict', 'tuple', 'int']
    data.insert(0,"string")
    print(data)
    运行结果:
    ['string', 'list', 'string', 'dict', 'tuple', 'int']

    6,pop

    pop方法,默认删除列表最后一个值,并且返回删除的值,也可以根据索引位删除指定值,且返回被删除数值的值。

    此方法配合insert方法可以实现队列操作,使用insert(0)添加值,使用pop(0)删除值,实现一个先进先出的队列,也可以使用append方法,使用pop方法,实现一个先进后出的队列

    放入和移出操作就是入栈和出栈,python可以使用append方法进行入栈操作,pop方法模拟出栈操作

    #pop方法
    data=['list', 'string', 'dict', 'tuple', 'int']
    print(data.pop())#默认删除最后一个值
    print(data.pop(1))#指定删除索引位1的值
    运行结果:
    int
    string
    在指定索引位时,不能超出列表长度,否则报错

    pop方法是唯一一个既能删除一个值又能返回该元素值的列表方法

    一个先进先出队列的实现示例:

    #先进先出的队列实现
    data=[]
    for i in range(4):
        data.insert(0,i)
        print(data)
        print(data.pop(0))
        print(data)   
    运行结果:
    添加值后的列表 [0]
    取出的值 0
    取出值后的列表 []
    添加值后的列表 [1]
    取出的值 1
    取出值后的列表 []

    一个先进后出的队列实现:

    #先进后出的队列实现
    data=[5,]
    for i in range(2):
        data.insert(0,i)
        print("添加值后的列表",data)
        print("取出的值",data.pop())
        print("取出值后的列表",data)
    运行结果:
    添加值后的列表 [0, 5]
    取出的值 5
    取出值后的列表 [0]
    添加值后的列表 [1, 0]
    取出的值 0
    取出值后的列表 [1]

    7,remove

    remove方法用于移除列表中某元素第一个匹配项:它移除后不会返回一个删除元素的值

    #remove方法
    data=['list', 'string', 'dict', 'tuple', 'int']
    data.remove("int")
    print(data)
    运行结果:
    ['list', 'string', 'dict', 'tuple']

    8,reverse

    reverse方法将列表中的元素反向存放,要想取值,使用reversed,此方法返回一个迭代器

    #reverse
    data=[1,2,3,4,5]
    print(data.reverse())
    redata=data.reverse()#测试后,reverse没有返回值
    print(redata)
    #要想取得返回值,使用reserved,返回一个迭代器
    a=reversed(data)
    print(a)#<list_reverseiterator object at 0x0000026DAA7FCB70>
    for i in a:
        print(i)

     9,sort

      sort方法用于在原位置对列表进行排序,会改变原列表,是列表元素按一定顺序排列。这个方法总是产生一个列表,所以他可以对任何序列进行操作排序

    #sort
    data=[2,5,7,8,5,3,1,4]
    data.sort()
    print(data)
    运行结果:
    [1, 2, 3, 4, 5, 5, 7, 8]

    sort方法没有返回值,它会改变原列表的值的顺序。

     列表的使用就到这里,到后边会介绍列表生成式,和列表推导式的使用

  • 相关阅读:
    OSGI简介
    公司僵尸帐号引发了一系列的入侵事件-细说密码强度验证的重要性
    为其他对象提供一种代理以控制对这个对象的访问-代理模式
    运用共享技术有效地支持大量细粒度的对象-享元模式
    移动APP为什么要开发两套Android和IOS-桥接模式
    非法疫苗引发的思考 -外观模式
    你们还记得张江男、张江女两张图片吗?-装饰模式
    一个程序员的蜕变(我是如何成为架构师的)
    公司新加了一台友宝自动售货机引发的思考-适配器模式
    程序员如何应对北上广高房价示例解说-建造者模式
  • 原文地址:https://www.cnblogs.com/lzh1118/p/6854370.html
Copyright © 2011-2022 走看看