Python3 数据结构基础详解1(列表、堆栈、队列)

Python3 数据结构

本章节我们主要结合前面所学的知识点来介绍Python数据结构。


列表

Python中列表是可变的,这是它区别于字符串和元组的最重要的特点,一句话概括即:列表可以修改,而字符串和元组不能。

以下是 Python 中列表的方法:

方法描述
list.append(x)把一个元素添加到列表的结尾,相当于a[len(a):] = [x]
list.extend(L)在list的结尾连接上另一个列表,相当于a[len(a): ] = L
list.insert(i,x)在指定位置插入一个元素,第一个参数是即将被插入到该元素前面的元素索引。例如:a.insert(0,x) ,x会插入到整个列表之前。而a.insert(len(a),x),相当于a.append(x)
list.pop([i])从列表的指定位置移除元素,并将其返回。如果没有指定索引,a.pop()返回最后一个元素。元素随即从列表中被移除。(方法中 i 两边的方括号表示这个参数是可选的,而不是要求你输入一对方括号,你会经常在 Python 库参考手册中遇到这样的标记。)
list.clear()移除列表中的所有项,等于del a[:]。
list.index(x)返回列表中第一个值为 x 的元素的索引。如果没有匹配的元素就会返回一个错误。
list.count(x)返回 x 在列表中出现的次数。
list.sort()对列表中的元素进行排序。
list.reverse()倒排列表中的元素。
list.copy()返回列表的浅复制,等于a[:]。

下面示例演示了列表的大部分方法:

def ListMethod(newlist):
    print('初始列表:',newlist)

    #在结尾增加元素
    a = 5
    newlist.append(a)
    print('结尾再增加元素:',newlist)

    #在结尾增加列表
    list2 = [11,12,13]
    newlist.extend(list2)
    print('结尾增加列表:',newlist)

    #插入一个元素在位置2
    b = 10
    newlist.insert(2,b)
    print('位置2前插入元素:',newlist)

    #移除位置3的元素,没有参数则是移除并返回最后一个元素
    c = newlist.pop(3)
    print('删除位置3的元素:',newlist,'返回删除的元素:',c)
    d = newlist.pop()
    print('删除最后一个元素:',newlist,'返回删除的元素:',d)

    #查找值为4的索引
    e = 4
    f = newlist.index(e)
    print('列表:',newlist,'4在列表中的索引为:',f)

    #返回2在列表中出现的次数
    g = 2
    h = newlist.count(g)
    print('列表',newlist,'2在列表中出现的次数:',h)

    #对列表进行排序
    newlist.sort()
    print('排序后的列表:',newlist)

    #对列表进行倒排
    newlist.reverse()
    print('倒排后的列表,',newlist)

    #复制一份列表(复制)
    list3 = newlist.copy()
    print('复制的列表:',list3)
    
    #改变原列表的值,复制的列表值是否改变
    newlist[0] = 20
    print('复制的列表(源列表该值后):',list3)


    #清空列表,移除列表所有项
    newlist.clear()
    print(newlist)
    

    return newlist

mylist = [0,1,2,3,4]
mylist = ListMethod(mylist)
print(mylist)

以上程序的运行结果为:
在这里插入图片描述
注意:类似 insert, remove 或 sort 等修改列表的方法没有返回值。


将列表当做堆栈使用

列表方法使得列表可以很方便的作为一个堆栈来使用,堆栈作为特定的数据结构,最先进入的元素最后一个被释放(后进先出)。用 append() 方法可以把一个元素添加到堆栈顶。用不指定索引的 pop() 方法可以把一个元素从堆栈顶释放出来。例如:

#py 堆栈 后进先出

stacklist = [1,2]

def EnterStack(value):
    stacklist.append(value)
    print(stacklist)

def OutStack():
    value = stacklist.pop()
    print(stacklist)
    return value

print('入堆栈:')
#入堆栈
EnterStack(13)
EnterStack(14)
print('----------------------------')
print('出堆栈:')
#出堆栈
a = OutStack()
print('出堆栈元素:',a)
a = OutStack()
print('出堆栈元素:',a)
a = OutStack()
print('出堆栈元素:',a)


以上脚本运行结果:
在这里插入图片描述


将列表当作队列使用

也可以把列表当做队列用, 只是在队列里第一加入的元素,第一个取出来;但是拿列表用作这样的目的效率不高。在列表的最后添加或者弹出元素速度快,然而在列表里插入或者从头部弹出速度却不快(因为所有其他的元素都得一个一个地移动)。

Python中的collentions中有一个deque,这个对象类似于list列表,但是使用list存储数据是,按索引访问元素很快,但是插入和删除就很慢了,因为list是线性存储,数据量大的时候,插入和删除效率很低。
但是deque是为了实现插入和删除操作的双向列表,适用于队列和栈.

#py 队列 先进先出
from collections import deque

Queuelist = deque([1,2,3])

def EnterQueue(value):
    Queuelist.append(value)
    print(Queuelist)

def OutQueue():
    value = Queuelist.popleft()
    print(Queuelist) 
    return value

print('入队列:')
EnterQueue(10)
EnterQueue(11)
print('----------------------')
print('出队列:')
a = OutQueue()
print('出队列元素:',a)
a = OutQueue()
print('出队列元素:',a)
a = OutQueue()
print('出队列元素:',a)

以上脚本运行结果:
在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学习者-小刈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值