热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Python中的llist模块

Python 中的 llist 模块原文:https://www.geeksforgeeks.org/llist-module-

Python 中的 llist 模块

原文:https://www.geeksforgeeks.org/llist-module-in-python/

直到很长一段时间,Python 都没有办法执行链表数据结构。它确实支持列表,但是当使用它们作为链表的概念时会遇到许多问题,比如列表是刚性的,并且没有通过指针连接,因此占用了定义的内存空间,如果列表没有完全填满,甚至可能会浪费内存空间。事实上,为了克服列表带来的问题,Python 的出列数据结构也可以像链表一样工作。但是所有这些都因为而被覆盖了。

Python 中的 llist 模块

llist 是 CPython 的扩展模块,提供了基本的链表结构。它们明显快于出列甚至标准列表。

装置

为了利用 llist 提供的优势,它必须像任何其他 python 扩展或模块一样使用 pip 进行安装。以下命令将完成这项工作。

pip install llist

如果不是这样,可以从http://pypi.python.org/pypi手动下载,然后解包资源,用“python setup.py install”编译。一旦模块成功安装,您只需要在需要时导入该模块。

提供的方法

目前,llist 提供以下两种类型的链表:


  1. 单链表(sllist) :节点指向旁边节点的链表。

  2. 双向链表(dllist) :一种链表,其中节点指向它后面的节点以及它前面的节点。

该模块包含以下对象:


  • dllist : 实现双链表的对象

  • dllistnode : 返回一个新的双向链表节点,可选初始化

  • dllistiterator:dllist 的迭代器对象

  • sllist : 实现单链表的对象

  • sllistnode : 单链表节点,可选初始化

  • sllistiterator:sllist 的迭代器对象

下面的例子将帮助你更好地理解。他们给出了关于执行 llist 支持的两种列表的基本想法:
例 1: sllist

# importing packages
import llist
from llist import sllist, sllistnode
# creating a linked list
lst = sllist(['first', 'second', 'third'])
print(lst)
print(lst.first)
print(lst.last)
print(lst.size)
print()
# adding and inserting values
lst.append('fourth')
node = lst.nodeat(2)
lst.insertafter('fifth', node)
print(lst)
print(lst.first)
print(lst.last)
print(lst.size)
print()
# poping a value
# i.e. removing the last entry of the list
lst.pop()
print(lst)
print(lst.first)
print(lst.last)
print(lst.size)
print()
# removing a specific element
node = lst.nodeat(1)
lst.remove(node)
print(lst)
print(lst.first)
print(lst.last)
print(lst.size)
print()

输出:

sllist([first, second, third])
sllistnode(first)
sllistnode(third)
3
sllist([first, second, third, fifth, fourth])
sllistnode(first)
sllistnode(fourth)
5
sllist([first, second, third, fifth])
sllistnode(first)
sllistnode(fifth)
4
sllist([first, third, fifth])
sllistnode(first)
sllistnode(fifth)
3

示例 2: dllist

# importing packages
import llist
from llist import dllist, dllistnode
# creating a linked list
lst = dllist(['first', 'second', 'third'])
print(lst)
print(lst.first)
print(lst.last)
print(lst.size)
print()
# adding and inserting values
lst.append('fourth')
node = lst.nodeat(2)
lst.extendleft(['fifth', 'sixth'])
new_node = dllistnode('seventh')
ref_node = lst.nodeat(2)
lst.insertnode(new_node, ref_node)
print(lst)
print(lst.first)
print(lst.last)
print(lst.size)
print()
# poping a value
# i.e. removing the last entry of the list
lst.pop()
print(lst)
print(lst.first)
print(lst.last)
print(lst.size)
print()
# removing a specific element
node = lst.nodeat(1)
lst.remove(node)
print(lst)
print(lst.first)
print(lst.last)
print(lst.size)
print()

输出:

dllist([first, second, third])
dllistnode(first)
dllistnode(third)
3
dllist([sixth, fifth, seventh, first, second, third, fourth])
dllistnode(sixth)
dllistnode(fourth)
7
dllist([sixth, fifth, seventh, first, second, third])
dllistnode(sixth)
dllistnode(third)
6
dllist([sixth, seventh, first, second, third])
dllistnode(sixth)
dllistnode(third)
5

推荐阅读
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • CEPH LIO iSCSI Gateway及其使用参考文档
    本文介绍了CEPH LIO iSCSI Gateway以及使用该网关的参考文档,包括Ceph Block Device、CEPH ISCSI GATEWAY、USING AN ISCSI GATEWAY等。同时提供了多个参考链接,详细介绍了CEPH LIO iSCSI Gateway的配置和使用方法。 ... [详细]
  • 加密世界下一个主流叙事领域:L2、跨链桥、GameFi等
    本文介绍了加密世界下一个主流叙事的七个潜力领域,包括L2、跨链桥、GameFi等。L2作为以太坊的二层解决方案,在过去一年取得了巨大成功,跨链桥和互操作性是多链Web3中最重要的因素。去中心化的数据存储领域也具有巨大潜力,未来云存储市场有望达到1500亿美元。DAO和社交代币将成为购买和控制现实世界资产的重要方式,而GameFi作为数字资产在高收入游戏中的应用有望推动数字资产走向主流。衍生品市场也在不断发展壮大。 ... [详细]
  • ALTERTABLE通过更改、添加、除去列和约束,或者通过启用或禁用约束和触发器来更改表的定义。语法ALTERTABLEtable{[ALTERCOLUMNcolu ... [详细]
  • 3.223.28周学习总结中的贪心作业收获及困惑
    本文是对3.223.28周学习总结中的贪心作业进行总结,作者在解题过程中参考了他人的代码,但前提是要先理解题目并有解题思路。作者分享了自己在贪心作业中的收获,同时提到了一道让他困惑的题目,即input details部分引发的疑惑。 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • 基于dlib的人脸68特征点提取(眨眼张嘴检测)python版本
    文章目录引言开发环境和库流程设计张嘴和闭眼的检测引言(1)利用Dlib官方训练好的模型“shape_predictor_68_face_landmarks.dat”进行68个点标定 ... [详细]
  • 前言无论使用哪种语言,我们都需要关注性能优化,提高执行效率。选择脚本语言需要持久的速度。在某种程度上,这句话说明了Python作为一种脚 ... [详细]
  • 需要执行:pipinstallscrapypipinstallrequests在Windows下用pip安装Scrapy报如下错误,看错误提示就知道去h ... [详细]
  • pandas的自带数据集_Pandas到底是个怎样的包?
    sh说明:本pandas非卧龙的pandas,而是Python众多科学计算包中的pandas。本次Pandas的简洁介绍,针对的是此包的新手࿰ ... [详细]
  • 申明下哈本篇文章不是自己写的根据网上的文章再加上自己的加加点点反正大部分都是网站的智慧哈!!!1、线程基本概念1.1线程是什么࿱ ... [详细]
  • 我们前面都是用python2给大家讲解,但是python2官方到2020年就不维护了,所以我们是时候用下python3了,本节以安装最新版 ... [详细]
author-avatar
烟台中海地产有限公司往
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有