深入了解python列表(LIST)


Posted in Python onJune 08, 2020

Python 内置的四种常用数据结构:列表(list)、元组(tuple)、字典(dict)以及集合(set)。

这四种数据结构一但都可用于保存多个数据项,这对于编程而言是非常重要的,因为程序不仅需要使用单个变量来保存数据,还需要使用多种数据结构来保存大量数据,而列表、元组、字典和集合就可满足保存大量数据的需求。

列表(list)和元组(tuple)比较相似,它们都按顺序保存元素,每个元素都有自己的索引,因此列表和元组都可通过索引访问元素。二者的区别在于元组是不可修改的,但列表是可修改的。

字典(dict)和集合(set)类似,它们存储的数据都是无序的,其中字典是用 key-value 的形式保存数据

python 序列详解

所谓序列,指的是一块可存放多个值的连续内存空间,这些值按一定顺序排列,可通过每个值所在位置的编号(称为索引)访问它们。

无论是采用正索引值,还是负索引值,都可以访问序列中的任何元素。

注意,在使用负值作为列序中各元素的索引值时,是从 -1 开始,而不是从 0 开始。

[root@kube list]# cat demo1.py 
str="Py序列化详解"
print(str[0],"---",str[-6])
print(str[5],"---",str[-1])
[root@kube list]# py demo1.py 
P --- y
详 --- 解
[root@kube list]#

序列切片

切片操作是访问序列中元素的另一种方法,它可以访问一定范围内的元素,通过切片操作,可以生成一个新的序列。

序列实现切片操作的语法格式如下:

sname[start : end : step]

其中,各个参数的含义分别是:

sname:表示序列的名称;

start:表示切片的开始索引位置(包括该位置),此参数也可以不指定,会默认为 0,也就是从序列的开头进行切片;

end:表示切片的结束索引位置(不包括该位置),如果不指定,则默认为序列的长度;

step:表示在切片过程中,隔几个存储位置(包含当前位置)取一次元素,也就是说,如果 step 的值大于 1,则在进行切片去序列元素时,会“跳跃式”的取元素。如果省略设置 step 的值,则最后一个冒号就可以省略。

[root@kube list]# cat demo2.py
str="py序列切片"
print(str[:0])    #end 为0 表示结束索引位置但是不包括该位置,因此为空 
print(str[:1])
print(str[:2])
print(str[1:2])
num="123456789"
print(num[1:5:2])    #在1-5 的区间中隔两位取一个值
[root@kube list]# py demo2.py 

p
py
y
24
[root@kube list]#

序列相加

Python 中,支持两种类型相同的序列使用“+”运算符做相加操作,它会将两个序列进行连接,但不会去除重复的元素。

里所说的“类型相同”,指的是“+”运算符的两侧序列要么都是序列类型,要么都是元组类型,要么都是字符串。

root@kube list]# cat demo3.py 
print("你好"+"我好"+"dajiahao")
[root@kube list]# py demo3.py 
你好我好dajiahao
[root@kube list]#

序列相乘

Python 中,使用数字 n 乘以一个序列会生成新的序列,其内容为原来序列被重复 n 次的结果

[root@kube list]# cat demo3.py 
str="你好"+"我好"+"dajiahao"
print(str*3)
[root@kube list]# py demo3.py 
你好我好dajiahao你好我好dajiahao你好我好dajiahao
[root@kube list]#

检查元素是否包含在序列中

Python 中,可以使用 in 关键字检查某元素是否为序列的成员,其语法格式为:

value in sequence

和 in 关键字用法相同,但功能恰好相反的,还有 not in 关键字,它用法检查某个元素是否不包含在指定的序列中

value not in sequence
[root@kube list]# cat demo4.py 
#coding:utf-8

str="test.com.cn"
print('e' in str)
print('e' not in str)
[root@kube list]# py demo4.py 
True
False
[root@kube list]#

和序列相关的内置函数

Python提供了几个内置函数(表 3 所示),可用于实现与序列相关的一些常用操作

表 3 序列相关的内置函数

函数 功能
len() 计算序列的长度,即返回序列中包含多少个元素。
max() 找出序列中的最大元素。注意,对序列使用 sum() 函数时,做加和操作的必须都是数字,不能是字符或字符串,否则该函数将抛出异常,因为解释器无法判定是要做连接操作(+ 运算符可以连接两个序列),还是做加和操作。
min() 找出序列中的最小元素。
list() 将序列转换为列表
str() 将序列转换为字符串。
sum() 计算元素和。
sorted() 对元素进行排序。
reversed() 反向序列中的元素。
enumerate() 将序列组合为一个索引序列,多用在for循环中。
[root@kube list]# cat demo5.py 
str="test.com.cn"
print(max(str))
print(min(str))
print(len(str))
print(list(str))
[root@kube list]# py demo5.py 
t
.
11
['t', 'e', 's', 't', '.', 'c', 'o', 'm', '.', 'c', 'n']
[root@kube list]#

python list 列表

Python 中没有数组,但是加入了更加强大的列表。如果把数组看做是一个集装箱,那么 Python 的列表就是一个工厂的仓库。

 从形式上看,列表会将所有元素都放在一对中括号 [] 中,相邻元素之间用逗号分隔,格式中,element1~elementn 表示列表中的元素,个数没有限制,只要是 Python 支持的数据类型就可以。如下所示

[element1,element2,element3,...,elementn]
[root@kube list]# cat demo6.py
lt=['c.test.com',1,[2,3],2.34,'aa']
print(lt)
print(type(lt))
[root@kube list]# py demo6.py 
['c.test.com', 1, [2, 3], 2.34, 'aa']
<class 'list'>
[root@kube list]#

创建列表

[root@kube list]# cat demo7.py
lt=[1,'x.test.com',[2,3]]    # = 号赋值使用 [] 括起来
str="1234test"
print(type(lt))
print(type(str))
lt2=list(str)       #使用 list() 函数转换
print(lt2)
print(type(lt2))
[root@kube list]# py demo7.py 
<class 'list'>
<class 'str'>
['1', '2', '3', '4', 't', 'e', 's', 't']
<class 'list'>
[root@kube list]#

python  访问和删除列表

[root@kube list]# cat demo8.py
vol=[1,'test.com',[3,4,5],44,'fff','ee']
print(vol[:1])
print(vol[:2])
print(vol[2:4])
del vol
print(vol)
[root@kube list]# py demo8.py 
[1]
[1, 'test.com']
[[3, 4, 5], 44]
Traceback (most recent call last):
 File "demo8.py", line 6, in <module>
 print(vol)
NameError: name 'vol' is not defined
[root@kube list]#

python list 列表添加元素的三种方法

append() 方法用于在列表的末尾追加元素,该方法的语法格式如下:

listname.append(obj)

当然,如果希望不将被追加的列表或元组当成一个整体,而是只追加列表中的元素,则可使用列表提供的 extend() 方法。extend()方法的语法格式如下:

listname.extend(obj)

如果希望在列表中间增加元素,则可使用列表的 insert() 方法,此方法的语法格式为:

listname.insert(index , obj)

其中,index 参数指的是将元素插入到列表中指定位置处的索引值。

使用 insert() 方法向列表中插入元素,和 append() 方法一样,无论插入的对象是列表还是元组,都只会将其整体视为一个元素。

[root@kube list]# cat demo9.py
a_list=['test.com.cn',2,[2,'a']]
a_list.append('b')
print(a_list)
a_list.extend([9,8,7])
print(a_list)
a_list.insert(4,'MM')
print(a_list)
[root@kube list]# py demo9.py 
['test.com.cn', 2, [2, 'a'], 'b']
['test.com.cn', 2, [2, 'a'], 'b', 9, 8, 7]
['test.com.cn', 2, [2, 'a'], 'b', 'MM', 9, 8, 7]
[root@kube list]#

python list 列表删除元素的三种方法

在列表中删除元素,主要分为以下 3 种应用场景:

1  根据目标元素所在位置的索引值进行删除,可使用 del 语句;

2  根据元素的值进行删除,可使用列表(list类型)提供的 remove() 方法;

3  将列表中所有元素全部删除,可使用列表(list类型)提供的 clear() 方法。

python list 修改元素

列表的元素相当于变量,因此程序可以对列表的元素赋值,这样即可修改列表的元素

slice 分片同样可以使用

[root@kube list]# cat demo11.py 
a_list=list(range(0,10))  #list() 函数转换为列表
print(a_list)
a_list[2]='a'     #替换序列为2 的值
print(a_list)
a_list[-1]='ffff'    #替换序列为-1 的值
print(a_list)
a_list[3:4]=['s','d']   #替换分片3-4 的值
print(a_list)
a_list[4:6]=[]     #把 4-6 的值替换为空
print(a_list)
a_list[1:3]='test'    #对列表使用 slice 语法赋值时,不能使用单个值;如果使用字符串赋值,Python 会自动把字符串当成序列处理,其中每个字符都是一个元素。
print(a_list)
a_list[2:6:2]=['MM','NN']  #在使用 slice 语法赋值时,也可指定 step 参数。但如果指定了 step 参数,则要求所赋值的列表元素个数与所替换的列表元素个数相等
print(a_list)
[root@kube list]# py demo11.py 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 'a', 3, 4, 5, 6, 7, 8, 9]
[0, 1, 'a', 3, 4, 5, 6, 7, 8, 'ffff']
[0, 1, 'a', 's', 'd', 4, 5, 6, 7, 8, 'ffff']
[0, 1, 'a', 's', 5, 6, 7, 8, 'ffff']
[0, 't', 'e', 's', 't', 's', 5, 6, 7, 8, 'ffff']
[0, 't', 'MM', 's', 'NN', 's', 5, 6, 7, 8, 'ffff']
[root@kube list]#

python list 常用方法

除前面的增加元素、删除元素、修改元素方法之外,列表还包含了一些常用的方法。

count() 方法,此方法用于统计列表中某个元素出现的次数

listname.count(obj)

index() 方法用于定位某个元素在列表中出现的位置(也就是索引),如果该元素没有出现,则会引发 ValueError 错误。此方法的基本语法格式为

listname.index(obj,start,end)

同 count() 方法不同,index() 方法还可传入 start、end 参数,用于在列表的指定范围内搜索元素。

pop() 方法会移除列表中指定索引处的元素,如果不指定,默认会移除列表中最后一个元素。该方法的基本语法格式为:

listname.pop(index)

reverse() 方法会将列表中所有元素反向存放。该方法的基本语法格式为:

listname.reverse()

sort() 方法用于对列表元素进行排序,排序后原列表中的元素顺序会方发生改变。sort() 方法的语法格式如下:

listname.sort(key=None, reserse=False)

可以看到,和其他方法不同,此方法中多了 2 个参数,它们的作用分别是:

key 参数用于指定从每个元素中提取一个用于比较的键。例如,使用此方法时设置 key=str.lower 表示在排序时不区分字母大小写。

reverse 参数用于设置是否需要反转排序,默认 False 表示从小到大排序;如果将该参数设为 True,将会改为从大到小排序。

下面代码示范了使用列表作为“栈”的示例:

stack = []
# 向栈中“入栈”3个元素
stack.append("fkit")
stack.append("crazyit")
stack.append("Charlie")
print(stack) # ['fkit', 'crazyit', 'Charlie']
# 第一次出栈:最后入栈的元素被移出栈
print(stack.pop())
print(stack) # ['fkit', 'crazyit']
# 再次出栈
print(stack.pop())
print(stack) # ['fkit']

python range 快速初始化数字列表

ython range() 函数能够轻松地生成一系列的数字。例如,可以像如下这样使用 range() 来打印一系列数字:

[root@kube list]# cat demo14.py 
#coding:utf-8
seq=[]
for i in range(1,4): #求1-3 的乘积
 vol=i**2
 seq.append(vol)
print(seq)

print('----------------------------')
print(type([1,2,3,4]))  #range 的type 类型的转化
print(type(range(1,5)))
[root@kube list]# py demo14.py 
[1, 4, 9]
----------------------------
<class 'list'>
<class 'range'>
[root@kube list]#

python list 列表实现栈和队列

队列和栈是两种数据结构,其内部都是按照固定顺序来存放变量的,二者的区别在于对数据的存取顺序:

队列是,先存入的数据最先取出,即“先进先出”。

栈是,最后存入的数据最先取出,即“后进先出”。

考虑到 list 类型数据本身的存放就是有顺序的,而且内部元素又可以是各不相同的类型,非常适合用于队列和栈的实现。本节将演示如何使用 list 类型变量来实现队列和栈。

python list 列表实现

使用 list 列表模拟队列功能的实现方法是,定义一个 list 变量,存入数据时使用 insert() 方法,设置其第一个参数为 0,即表示每次都从最前面插入数据;读取数据时,使用 pop() 方法,即将队列的最后一个元素弹出。

[root@kube list]# cat demo15.py 
#coding:utf-8

#定义一个空列表,当做队列
queue = []
#向列表中插入元素
queue.insert(0,"one")
queue.insert(0,"two")
queue.insert(0,"three")
print(queue)
print('取第一个元素:',queue.pop())  #pop() 默认取队列最后一位
print('取第二个元素:',queue.pop())
print('取第三个元素:',queue.pop())

[root@kube list]# py demo15.py 
['three', 'two', 'one']
取第一个元素: one
取第二个元素: two
取第三个元素: three
[root@kube list]#

python  实现栈

使用 list 列表模拟栈功能的实现方法是,使用 append() 方法存入数据;使用 pop() 方法读取数据。append() 方法向 list 中存入数据时,每次都在最后面添加数据,这和前面程序中的 insert() 方法正好相反。

[root@kube list]# cat demo16.py 
#coding:utf-8

#定义一个list 当栈
stack = []
stack.append('one')
stack.append('two')
stack.append('three')
print(stack)
print('取第一个元素:',stack.pop())
print('取第二个元素:',stack.pop())
print('取第三个元素:',stack.pop())
[root@kube list]# py demo16.py 
['one', 'two', 'three']
取第一个元素: three
取第二个元素: two
取第三个元素: one
[root@kube list]#

collections模块实现栈和队列

queueAndStack = deque()
queueAndStack.append(1)
queueAndStack.append(2)
queueAndStack.append("hello")
print(list(queueAndStack))
#实现队列功能,从队列中取一个元素,根据先进先出原则,这里应输出 1
print(queueAndStack.popleft())
#实现栈功能,从栈里取一个元素,根据后进先出原则,这里应输出 hello
print(queueAndStack.pop())
#再次打印列表
print(list(queueAndStack))

以上就是深入了解python列表(LIST)的详细内容,更多关于Python(list)的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python和php通信乱码问题解决方法
Apr 15 Python
几个提升Python运行效率的方法之间的对比
Apr 03 Python
python使用自定义user-agent抓取网页的方法
Apr 15 Python
python将文本中的空格替换为换行的方法
Mar 19 Python
mac 安装python网络请求包requests方法
Jun 13 Python
python基础 range的用法解析
Aug 23 Python
python向图片里添加文字
Nov 26 Python
解决pyinstaller打包运行程序时出现缺少plotly库问题
Jun 02 Python
Python venv虚拟环境配置过程解析
Jul 08 Python
Python字符串函数strip()原理及用法详解
Jul 23 Python
详解python 条件语句和while循环的实例代码
Dec 28 Python
python中zip()函数遍历多个列表方法
Feb 18 Python
将pycharm配置为matlab或者spyder的用法说明
Jun 08 #Python
基于python实现matlab filter函数过程详解
Jun 08 #Python
浅谈tensorflow中dataset.shuffle和dataset.batch dataset.repeat注意点
Jun 08 #Python
Python3通过chmod修改目录或文件权限的方法示例
Jun 08 #Python
win10下python3.8的PIL库安装过程
Jun 08 #Python
python rolling regression. 使用 Python 实现滚动回归操作
Jun 08 #Python
Python selenium爬虫实现定时任务过程解析
Jun 08 #Python
You might like
PHP上传图片进行等比缩放可增加水印功能
2014/01/13 PHP
php实现学生管理系统
2020/03/21 PHP
php设计模式之原型模式分析【星际争霸游戏案例】
2020/03/23 PHP
对textarea框的代码调试,而且功能上使用非常方便,酷
2006/06/30 Javascript
Jquery 基础学习笔记
2009/05/29 Javascript
javascript随机显示背景图片的方法
2015/06/18 Javascript
js实现div模拟模态对话框展现URL内容
2016/05/27 Javascript
JavaScript鼠标事件,点击鼠标右键,弹出div的简单实例
2016/08/03 Javascript
使用JS 插件qrcode.js生成二维码功能
2017/02/20 Javascript
JS实现动态给标签控件添加事件的方法示例
2017/05/13 Javascript
利用JS如何计算字符串所占字节数示例代码
2017/09/13 Javascript
使用vue的transition完成滑动过渡的示例代码
2018/06/25 Javascript
layui 给数据表格加序号的方法
2018/08/20 Javascript
解决IE11 vue +webpack 项目中数据更新后页面没有刷新的问题
2018/09/25 Javascript
基于node简单实现RSA加解密的方法步骤
2019/03/21 Javascript
ES6数组与对象的解构赋值详解
2019/06/14 Javascript
vue项目中锚点定位替代方式
2019/11/13 Javascript
在vue中实现清除echarts上次保留的数据(亲测有效)
2020/09/09 Javascript
python使用in操作符时元组和数组的区别分析
2015/05/19 Python
浅谈python for循环的巧妙运用(迭代、列表生成式)
2017/09/26 Python
python文件名和文件路径操作实例
2017/09/29 Python
python快速建立超简单的web服务器的实现方法
2018/02/17 Python
uwsgi+nginx部署Django项目操作示例
2018/12/04 Python
对Python正则匹配IP、Url、Mail的方法详解
2018/12/25 Python
Python 常用日期处理 -- calendar 与 dateutil 模块的使用
2020/09/02 Python
美国知名的百货清仓店:Neiman Marcus Last Call
2016/08/03 全球购物
日本土著品牌,综合型购物网站:Cecile
2016/08/23 全球购物
墨西哥购物网站:Elektra
2020/01/21 全球购物
美国乒乓球设备、配件和服装品牌:Killerspin
2020/06/07 全球购物
JSP和EJB可以共享HttpSession么?EJB里面可以改变session里面的内容
2013/06/05 面试题
家长给幼儿园的表扬信
2014/01/09 职场文书
2014学习全国两会精神心得体会2000字
2014/03/11 职场文书
2014年德育工作总结
2014/11/20 职场文书
地雷战观后感
2015/06/09 职场文书
python 常用的异步框架汇总整理
2021/06/18 Python
PostgreSQL数据库去除重复数据和运算符的基本查询操作
2022/04/12 PostgreSQL