深入了解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的函数嵌套的使用方法
Jan 24 Python
python运行其他程序的实现方法
Jul 14 Python
Python使用re模块实现信息筛选的方法
Apr 29 Python
对python同一个文件夹里面不同.py文件的交叉引用方法详解
Dec 15 Python
python ddt数据驱动最简实例代码
Feb 22 Python
使用django实现一个代码发布系统
Jul 18 Python
Python with标签使用方法解析
Jan 17 Python
python 实现在shell窗口中编写print不向屏幕输出
Feb 19 Python
将pycharm配置为matlab或者spyder的用法说明
Jun 08 Python
详解pandas获取Dataframe元素值的几种方法
Jun 14 Python
详解torch.Tensor的4种乘法
Sep 03 Python
pycharm 使用anaconda为默认环境的操作
Feb 05 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
利用递归把多维数组转为一维数组的函数
2006/10/09 PHP
比较全的PHP 会话(session 时间设定)使用入门代码
2008/06/05 PHP
Yii 快速,安全,专业的PHP框架
2014/09/03 PHP
微信公众平台实现获取用户OpenID的方法
2015/04/15 PHP
php版微信公众平台回复中文出现乱码问题的解决方法
2016/09/22 PHP
浅析Js(Jquery)中,字符串与JSON格式互相转换的示例(直接运行实例)
2013/07/09 Javascript
javascript实现禁止右键和F12查看源代码
2014/12/26 Javascript
WEB前端开发框架Bootstrap3 VS Foundation5
2016/05/16 Javascript
浅谈js基本数据类型和typeof
2016/08/09 Javascript
表单input项使用label同时引用Bootstrap库导致input点击效果区增大问题
2016/10/11 Javascript
微信小程序进入广告实现代码实例
2019/09/19 Javascript
Vue实现开关按钮拖拽效果
2020/09/22 Javascript
[55:25]2018DOTA2亚洲邀请赛3月29日 小组赛A组 VG VS OG
2018/03/30 DOTA
[04:16]完美世界DOTA2联赛PWL S2 集锦第一期
2020/11/23 DOTA
Python中Collections模块的Counter容器类使用教程
2016/05/31 Python
在Python的一段程序中如何使用多次事件循环详解
2017/09/07 Python
python 两个数据库postgresql对比
2019/10/21 Python
Python单链表原理与实现方法详解
2020/02/22 Python
解决Django部署设置Debug=False时xadmin后台管理系统样式丢失
2020/04/07 Python
Python 如何操作 SQLite 数据库
2020/08/17 Python
详解Anaconda安装tensorflow报错问题解决方法
2020/11/01 Python
Django中template for如何使用方法
2021/01/31 Python
免税水晶:Duty Free Crystal
2019/05/13 全球购物
英国婚礼商城:Wedding Mall
2019/11/02 全球购物
大学生职业规划前言模板
2013/12/27 职场文书
给水工程专业毕业生自荐信
2014/01/28 职场文书
《草原》教学反思
2014/02/15 职场文书
李开复演讲稿
2014/05/24 职场文书
2014教师“四风问题”对照检查材料思想汇报
2014/09/16 职场文书
2015年学校总务工作总结
2015/07/20 职场文书
爱心捐款倡议书:点燃希望,传递温暖
2019/11/04 职场文书
乔迁新居祝福语
2019/11/04 职场文书
MySQL大小写敏感的注意事项
2021/05/24 MySQL
Golang二维数组的使用方式
2021/05/28 Golang
vue3语法糖内的defineProps及defineEmits
2022/04/14 Vue.js
win10此电脑打不开怎么办 win10双击此电脑无响应的解决办法
2022/07/23 数码科技