4、数据类型二:Lists
1、关于list的组织形式
列表数据类型(Lists)可以存储一个有序的字符串列表,常用的操作时向列表两段添加元素,或者获取列表的某一个片段。列表类型的底层实现是一个双向链表(double linked list),所以向列表两端添加元素的时间复杂度为O(1),读取两端元素也非常快。同理,元素越是靠近中间位置,其读取速度越慢。
列表数据类型的组织形式如下:

图1. list组织结构图
用双向链表(双向箭头)将许多的字符串组织成了一个list(方括号)。
2、list的命令集
LPUSH key value [value ...]
LPUSHX key value
RPUSH key value [value ...]
RPUSHX key value LPOP key
BLPOP key [key ...] timeout
RPOP key
BRPOP key [key ...] timeout RPOPLPUSH source destination
BRPOPLPUSH source destination timeout LINSERT key BEFORE|AFTER pivot value
LREM key count value LINDEX key index
LSET key index value
LLEN key LRANGE key start stop
①、LPUSH key value [value ...] / RPUSH key value [value ...] / LPOP key / RPOP key
功能:类似于压栈和出栈操作,只是可以从两个方法分别进行。注意,空的列表key是不会存在的,即通过POP操作将所有列表中的value全部弹出时,key便会自动删除。
时间复杂度:O(1)
example:

②、LPUSHX key value / RPUSHX key value
功能:在做LPUSH之前或RPUSH之前首先检查key是否存在,如果存在则将value作push操作,否则不执行任何操作。
时间复杂度:O(1)
example:

③、BLPOP key [key ...] timeout / BRPOP key [key ...] timeout
功能:阻塞式弹出命令。如果key不存在,则等待,直到超时为止。
时间复杂度:O(1),不阻塞的情况下与LPOP或RPOP时间一样。
example:
在第一个客户端中检测list不存在,使用阻塞的BLPOP list 300,这是阻塞时间为300秒。由于list为空,所有命令行不返回:

在第二个客户端中push一个list,此时list中有值了:

一旦list中有值出现,便返回:

④、RPOPLPUSH source destination / BRPOPLPUSH source destination timeout
功能:source通过RPOP命令弹出一个元素,并且将该元素通过LPUSH压入到destination中。BRPOPLPUSH是阻塞式命令。
时间复杂度:O(1)
example:

⑤、LINSERT key BEFORE|AFTER pivot value
功能:向list中插入一个value值,插入的位置参考pivot。如果key不存在,则不作任何操作。如果pivot不存在,则返回-1
时间复杂度:O(N),其中N是找到pivot之前需要查找的value个数
example:

⑥、LREM key count value
功能:删除key列表中前count个值等于value的元素。count取值:
count > 0,则删除从左到右的前count个值等于value的元素
count < 0,则删除从右到左的前count个值等于value的元素
count = 0,则删除列表中所有值等于value的元素
时间复杂度:O(N),N表示列表的长度。
example:

⑦、LSET key index value
功能:将列表中在index位置的元素值设置为value。
时间复杂度:O(N),N是列表的长度。如果设置第一个元素或最后一个元素,则时间复杂度为O(1)。
example:

4、数据类型二:Lists的更多相关文章
- MYSQL基础笔记(七)- 数据类型二
字符串类型 在SQL中,讲字符串类型分成了六类:char,varchar,text,blob,enum,set char,定长字符串 磁盘(二维表)在定义结构的时候,就已经确定了最终数据的存储长度. ...
- MySQL学习5 - 数据类型二.md
一 字符类型 二 枚举类型和集合类型 一 字符类型 #官网:https://dev.mysql.com/doc/refman/5.7/en/char.html #注意:char和varchar括号内的 ...
- Python学习—基础篇之基本数据类型(二)
Python中重要的数据结构 1.列表 2.元组 3.字典 4.集合 列表 1.创建列表 # 方式一 name = [] print(type(name)) # 执行结果 >>> & ...
- 第二章 C#语法基础(2.1C#语言的数据类型二)
数据类型案例说明 一.数据类型与变量(计算整数10与20的和) namespace ConsoleApp1 { class Program { static void Main(string[] ar ...
- python 数据类型二 (列表和元组)
一.列表 1.1 列表的介绍 列表是python的基本数据类型之一,其他编程语言也有类似的数据类型,比如JS中的数组,java中的数组等等,它是以[]括起来,每个元素用逗号隔开,而且可以存放各种数据类 ...
- python基础----数据类型二
数据类型 计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值.但是,计算机能处理的远不止数值,还可以处理文本.图形.音频.视频.网页等各种各样的数据,不同的数据,需要定 ...
- python数据类型二
阅读目录 1.列表的去嵌套 2.元组 3.range 列表的增删改查 一,增: 注意 list和str是不一样的,lst可以发生改变,所以直接就在原来的对象上进行可操作 追加模式 lst = ['麻 ...
- python数据类型二(列表和元组)
一.列表 1.1 列表的介绍 列表是python的基本数据类型之一,其他编程语言也有类似的数据类型,比如JS中的数组,java中的数组等等,它是以[]括起来,每个元素用逗号隔开,而且可以存放各种数据类 ...
- python基础3 ---python数据类型二
ython基础 一.python数据类型 ------列表(list) 1.定义:[]内以逗号分隔,按照索引,存放各种数据类型,每个位置代表一个元素 特性:可存放多个不同类型的值:可修改指定索 ...
随机推荐
- [sklearn]性能度量之AUC值(from sklearn.metrics import roc_auc_curve)
原创博文,转载请注明出处! 1.AUC AUC(Area Under ROC Curve),即ROC曲线下面积. 2.AUC意义 若学习器A的ROC曲线被学习器B的ROC曲线包围,则学习器B的性能优于 ...
- 关于dyld: Library not loaded
在接入智凡迪的sdk过程中,遇到以下问题: dyld: Library not loaded: @rpath/SDKFramework.framework/SDKFramework Referen ...
- C# 后台模拟前台post发送json数据
public static string PostMoths(string url, string param) { string strURL = url; System.Net.HttpWebRe ...
- BZOJ4831: [Lydsy1704月赛]序列操作(非常nice的DP& 贪心)
4831: [Lydsy1704月赛]序列操作 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 250 Solved: 93[Submit][Statu ...
- Java8新特性——StreamAPI(一)
1. 流的基本概念 1.1 什么是流? 流是Java8引入的全新概念,它用来处理集合中的数据,暂且可以把它理解为一种高级集合. 众所周知,集合操作非常麻烦,若要对集合进行筛选.投影,需要写大量的代码, ...
- 《selenium2 python 自动化测试实战》(9)——切换窗口
有时候我们点击按钮后页面会跳转到新的窗口,我们需要到新的窗口中去进行接下来的操作,这时候就需要切换窗口的操作,我们根据句柄(handle)来操作窗口之间的切换,看代码: # coding: utf-8 ...
- 错误:Authentication with old password no longer supported, use 4.1 style passwords.
今天重新装了系统,mysql connector 使用了官网的最新版本(6.8.3). 启动项目出现标题中的错误.原因大家谷歌. 解决方法,使用低版本的 connector. 我使用的是 6.5.6 ...
- WebBrower使用 Http 代理访问网页
public struct Struct_INTERNET_PROXY_INFO { public int dwAccessType; public IntPtr proxy; public IntP ...
- container-diff 谷歌开源镜像分析工具使用
1. 安装 curl -LO https://storage.googleapis.com/container-diff/latest/container-diff-linux-amd64 & ...
- wekan 工具配置
1. 安装 使用docker-compose 安装,主要是方便简单,后期维护比较简单 2. 配置 docker-compose.yaml 文件 version: '2' ser ...