深入了解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 yield使用方法示例
Dec 04 Python
python基于Tkinter库实现简单文本编辑器实例
May 05 Python
解决Python中字符串和数字拼接报错的方法
Oct 23 Python
利用 Monkey 命令操作屏幕快速滑动
Dec 07 Python
Python 通过调用接口获取公交信息的实例
Dec 17 Python
Python可变和不可变、类的私有属性实例分析
May 31 Python
选择python进行数据分析的理由和优势
Jun 25 Python
Python迭代器模块itertools使用原理解析
Dec 11 Python
django商品分类及商品数据建模实例详解
Jan 03 Python
python 浮点数四舍五入需要注意的地方
Aug 18 Python
Python爬取网站图片并保存的实现示例
Feb 26 Python
python 破解加密zip文件的密码
Apr 22 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
用sql命令修改数据表中的一个字段为非空(not null)的语句
2010/06/04 PHP
Windows和Linux中php代码调试工具Xdebug的安装与配置详解
2014/05/08 PHP
ThinkPHP标签制作教程
2014/07/10 PHP
php实现获取农历(阴历)、节日、节气的类与用法示例
2017/11/20 PHP
基于jquery用于查询操作的实现代码
2010/05/10 Javascript
Javascript跨域请求的4种解决方式
2013/03/17 Javascript
jquery的ajaxSubmit()异步上传图片并保存表单数据演示代码
2013/06/04 Javascript
js设置cookie过期及清除浏览器对应名称的cookie
2013/10/24 Javascript
JS实现至少包含字母、大小写数字、字符的密码等级的两种方法
2015/02/03 Javascript
JavaScript实现复制或剪切内容到剪贴板功能的方法
2016/05/23 Javascript
javascript实现随机生成DIV背景色
2016/06/20 Javascript
AngularJS 路由详解和简单实例
2016/07/28 Javascript
使用JavaScript判断用户输入的是否为正整数(两种方法)
2017/02/05 Javascript
Vue.js -- 过滤器使用总结
2017/02/18 Javascript
js获取浏览器和屏幕的各种宽度高度
2017/02/22 Javascript
基于bootstrap实现bootstrap中文网巨幕效果
2017/05/02 Javascript
Vue工程模板文件 webpack打包配置方法
2017/12/26 Javascript
vue返回上一页面时回到原先滚动的位置的方法
2018/12/20 Javascript
vue中多路由表头吸顶实现的几种布局方式
2019/04/12 Javascript
jQuery层叠选择器用法实例分析
2019/06/28 jQuery
vue-cli+iview项目打包上线之后图标不显示问题及解决方法
2019/10/16 Javascript
vue 解决遍历对象显示的顺序不对问题
2019/11/07 Javascript
[02:16]DOTA2超级联赛专访Burning 逆袭需要抓住机会
2013/06/24 DOTA
动态创建类实例代码
2009/10/07 Python
Python命令启动Web服务器实例详解
2017/02/23 Python
python正则表达式re之compile函数解析
2017/10/25 Python
python绘制规则网络图形实例
2019/12/09 Python
python实现高斯投影正反算方式
2020/01/17 Python
Python实现井字棋小游戏
2020/03/09 Python
使用已经得到的keras模型识别自己手写的数字方式
2020/06/29 Python
css3中背景尺寸background-size详解
2014/09/02 HTML / CSS
windeln官方海外旗舰店:德淘超人气母婴超市
2017/12/15 全球购物
会展策划与管理专业求职信
2014/06/09 职场文书
运动会标语
2014/06/21 职场文书
党员先进事迹材料
2014/12/19 职场文书
Vue3.0 手写放大镜效果
2021/07/25 Vue.js