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的更多相关文章

  1. MYSQL基础笔记(七)- 数据类型二

    字符串类型 在SQL中,讲字符串类型分成了六类:char,varchar,text,blob,enum,set char,定长字符串 磁盘(二维表)在定义结构的时候,就已经确定了最终数据的存储长度. ...

  2. MySQL学习5 - 数据类型二.md

    一 字符类型 二 枚举类型和集合类型 一 字符类型 #官网:https://dev.mysql.com/doc/refman/5.7/en/char.html #注意:char和varchar括号内的 ...

  3. Python学习—基础篇之基本数据类型(二)

    Python中重要的数据结构 1.列表 2.元组 3.字典 4.集合 列表 1.创建列表 # 方式一 name = [] print(type(name)) # 执行结果 >>> & ...

  4. 第二章 C#语法基础(2.1C#语言的数据类型二)

    数据类型案例说明 一.数据类型与变量(计算整数10与20的和) namespace ConsoleApp1 { class Program { static void Main(string[] ar ...

  5. python 数据类型二 (列表和元组)

    一.列表 1.1 列表的介绍 列表是python的基本数据类型之一,其他编程语言也有类似的数据类型,比如JS中的数组,java中的数组等等,它是以[]括起来,每个元素用逗号隔开,而且可以存放各种数据类 ...

  6. python基础----数据类型二

    数据类型 计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值.但是,计算机能处理的远不止数值,还可以处理文本.图形.音频.视频.网页等各种各样的数据,不同的数据,需要定 ...

  7. python数据类型二

    阅读目录 1.列表的去嵌套 2.元组 3.range 列表的增删改查 一,增: 注意  list和str是不一样的,lst可以发生改变,所以直接就在原来的对象上进行可操作 追加模式 lst = ['麻 ...

  8. python数据类型二(列表和元组)

    一.列表 1.1 列表的介绍 列表是python的基本数据类型之一,其他编程语言也有类似的数据类型,比如JS中的数组,java中的数组等等,它是以[]括起来,每个元素用逗号隔开,而且可以存放各种数据类 ...

  9. python基础3 ---python数据类型二

    ython基础 一.python数据类型     ------列表(list) 1.定义:[]内以逗号分隔,按照索引,存放各种数据类型,每个位置代表一个元素 特性:可存放多个不同类型的值:可修改指定索 ...

随机推荐

  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的性能优于 ...

  2. 关于dyld: Library not loaded

    在接入智凡迪的sdk过程中,遇到以下问题: dyld: Library not loaded: @rpath/SDKFramework.framework/SDKFramework   Referen ...

  3. C# 后台模拟前台post发送json数据

    public static string PostMoths(string url, string param) { string strURL = url; System.Net.HttpWebRe ...

  4. BZOJ4831: [Lydsy1704月赛]序列操作(非常nice的DP& 贪心)

    4831: [Lydsy1704月赛]序列操作 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 250  Solved: 93[Submit][Statu ...

  5. Java8新特性——StreamAPI(一)

    1. 流的基本概念 1.1 什么是流? 流是Java8引入的全新概念,它用来处理集合中的数据,暂且可以把它理解为一种高级集合. 众所周知,集合操作非常麻烦,若要对集合进行筛选.投影,需要写大量的代码, ...

  6. 《selenium2 python 自动化测试实战》(9)——切换窗口

    有时候我们点击按钮后页面会跳转到新的窗口,我们需要到新的窗口中去进行接下来的操作,这时候就需要切换窗口的操作,我们根据句柄(handle)来操作窗口之间的切换,看代码: # coding: utf-8 ...

  7. 错误:Authentication with old password no longer supported, use 4.1 style passwords.

    今天重新装了系统,mysql connector 使用了官网的最新版本(6.8.3). 启动项目出现标题中的错误.原因大家谷歌. 解决方法,使用低版本的 connector. 我使用的是 6.5.6 ...

  8. WebBrower使用 Http 代理访问网页

    public struct Struct_INTERNET_PROXY_INFO { public int dwAccessType; public IntPtr proxy; public IntP ...

  9. container-diff 谷歌开源镜像分析工具使用

    1. 安装 curl -LO https://storage.googleapis.com/container-diff/latest/container-diff-linux-amd64 & ...

  10. wekan 工具配置

    1. 安装     使用docker-compose 安装,主要是方便简单,后期维护比较简单    2. 配置     docker-compose.yaml  文件 version: '2' ser ...