Python数据类型之List列表实例详解


Posted in Python onMay 08, 2019

本文实例讲述了Python数据类型之List列表。分享给大家供大家参考,具体如下:

list列表

1.概述:

通过之前的学习,我们知道变量可以存储数据,但是一个变量只能存储一个数据,现在有一个班级,班级有20个人,现在求班级的平均年龄。

若按照之前的方式来解决

age1 = 10
age2 = 12
...
age20 = 12
average = (age1 + age2 +...+age20)/20

在这里,很显然这种方法显得很麻烦,而python提供了一种解决方案,就是使用列表,可以随时添加和删除其中的元素。

本质:list列表的本质是一种有序的集合

2.创建列表

语法: 列表名 = [元素1,元素2,元素3…说明:列表中的选项被称为元素,跟string类似,下标也是从0开始计数

使用:创建列表

#创建空列表
list1 = []
#创建带有元素的列表
list2 = [10, 20, 30, 10]
print(list2)
list3 = list(range(1,10))
list4 = [i for i in range(10)]
print(list3)
print(list4)

输出:

[10, 20, 30, 10]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

在列表中元素的数据类型可以不同(灵活性)

list3 = [33, "good", True, 10.32]
print(list3)

输出:

[33, 'good', True, 10.32]

3.列表元素的访问

3.1 列表的取值

功能:访问list列表中元素值

语法:列表名[索引]

list4 = [22, 33, 12, 32, 45]
#下标从0开始,最大值为len(list4)-1
print(list4[0])

输出:

22

注意:当索引值大于len(list4)-1的时候,会出现以下错误:

print(list4[5])
IndexError: list index out of range

这个错误就是下标越界【下标超出了可表示的范围】

3.2 列表元素的替换

功能:更改列表元素的值

语法:列表名[下标] = 值

list4 = [22, 33, 12, 32, 45]
list4[0] = "hello"
print(list4[0])
print(list4)

输出:

hello
['hello', 33, 12, 32, 45]

4.列表操作

4.1 列表组合

语法: 列表3 = 列表1 + 列表2

list1 = [1, 2, 3]
list2 = ['hello', 'yes', 'no']
list3 = list1 + list2
print(list3)

输出:

[1, 2, 3, 'hello', 'yes', 'no']

4.2 列表重复

语法: 列表2 = 列表1 * n

list1 = [1, 2, 3]
list2 = list1 * 2
print(list2)

输出:

[1, 2, 3, 1, 2, 3]

4.3 判断元素是否在列表中

语法:元素 in 列表

若存在则返回True,否则返回False

list1 = [1, 2, 3]
print(1 in list1)

输出:

True

4.4 列表截取

语法:列表[start: end] 表示获取从开始下标到结束下标的所有元素[start, end)

list1 = [1, 2, 3, 'hello', 'yes', 'no']
print(list1[2:4])
#若不指定start,则默认从0开始截取,截取到指定位置
#若不指定end,则从指定位置开始截取,截取到末尾结束

输出:

[3, 'hello']

4.5 二维列表

语法:列表 =[列表1,列表2,列表3,… ,列表n]

#创建二维列表,即列表中的元素还是列表
list1 = [[1, 2, 3],[2, 3, 4],[5, 4, 9]]

4.5 二维列表取值

语法:列表名[下标1][下标2]

注意:下标1代表第n个列表(下标从0开始),下标2代表第n个列表中的第n个元素

list1 = [[1, 2, 3],[2, 3, 4],[5, 4, 9]]
print(list1[0][0])

输出:

1

5.列表的方法

5.1 list.append(元素/列表)

功能:在列表中末尾添加新的元素【在原本的列表中追加元素】

注意:append()中的值可以是列表也可以是普通元素

>>> list1 = [3, 4, 6]
>>> list1.append(6)
>>> print(list1)
[3, 4, 6, 6]

5.2 list.extend(列表)

功能:在列表的末尾一次性追加另外一个列表中的多个值

注意:extend()中的值只能是列表/元组[一个可迭代对象],不能是元素。

>>> list1 = [1,2,3]
>>> list2 = [3, 4,5]
>>> list1.extend(list2)
>>> print(list1)
[1, 2, 3, 3, 4, 5]

5.3 list.insert(下标值, 元素/列表)

功能:在下标处插入元素,不覆盖原本的数据,原数据向后顺延。

注意:插入的数据可以是元素也可以为列表。

>>> list1 = [1,2,3]
>>> list1.insert(1,0)
>>> print(list1)
[1, 0, 2, 3]
>>> list1.insert(1,[2, 4, 8])
>>> print(list1)
[1, [2, 4, 8], 0, 2, 3]

5.4 list.pop(下标值)

功能:移除列表中指定下标处的元素(默认移除最后一个元素),并返回移除的数据。

>>> list1 = [1, [2, 4, 8], 0, 2, 3]
>>> list1.pop()
3
>>> print(list1)
[1, [2, 4, 8], 0, 2]
>>> list1.pop(2)
0
>>> print(list1)
[1, [2, 4, 8], 2]

5.5 list.remove(元素)

功能:移除列表中的某个元素第一个匹配结果

list1 = [1, 2,3,2,4]
list1.remove(2)
print(list1)

输出:

[1, 3, 2, 4]

5.6 list.clear()

功能:清除列表中所有的数据

>>> list1 = [1, 2, 3]
>>> list1.clear()
>>> print(list1)
[]

5.7 list.index(元素[, start][, stop])

功能:从指定的范围的列表中找出某个值第一匹配的索引值

若不指定范围,则默认是整个列表。

>>> list1 = [1, 2, 3]
>>> list1.index(2)
1
>>> list1.index(4)
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
ValueError: 4 is not in list

注意:若在列表中找不到这个元素,则会报错。

5.8 list.count(元素)

功能:查看元素在列表中出现的次数

>>> list1 = [1, 2, 3, 1]
>>> list1.count(1)
2

5.9 len(list)

功能: 获取元素个数

>>> list1 = [1, 2, 3, 1]
>>> len(list1)
4

5.10 max(list)

语法:获取列表中的最大值,元素是不同的数据类型时不能使用

>>> list1 = [1, 2, 3, 1]
>>> max(list1)
3

5.11 min(list)

语法:获取列表中的最小值,元素是不同的数据类型时不能使用

>>> list1 = [1, 2, 3, 1]
>>> min(list1)

5.12 list.reverse()

语法: 列表倒叙,直接修改原列表,返回值为None。

>>> list1 = [1, 2, 3, 1]
>>> list1.reverse()
>>> print(list1)
[1, 3, 2, 1]

5.13 list.sort()

语法:列表排序 默认升序,元素是不同的数据类型时不能使用

>>> list1 = [1, 2, 3, 1]
>>> list1.sort()
>>> print(list1)
[1, 1, 2, 3]
#倒序
list1 = [1, 2,3,2,4]
list1.sort(reverse=False)
print(list1)

输出:

[1, 2, 2, 3, 4]

5.14 浅拷贝

语法:

list1 = [1, 2, 3]
​list2 = list1
>>> list1 = [1, 2, 3, 1]
>>> list2 = list1
>>> print(list2)
[1, 2, 3, 1]
>>> print(id(list1))
4314476424
>>> print(id(list2))
4314476424
list1 = [1, 2,3,2,4]
list2 = list1
list2[0] = 0
print(list1)

输出:

[0, 2, 3, 2, 4]

注意:浅拷贝为引用拷贝,类似于快捷方式。

浅拷贝中一个变量发生改变,另一个也相应发生改变,

5.15 深拷贝

语法:

list1 = [1, 2, 3]
​list2 = list1.copy()

方式2:

list2 = list1[:]
>>> list1 = [1, 2, 3, 1]
>>> list2 = list1.copy()
>>> print(list2)
[1, 2, 3, 1]
>>> print(id(list2))
4314525320
>>> print(id(list1))
4314524808
list1 = [1, 2,3,2,4]
list2 = list1[:]
print(list2)
print(id(list1))
print(id(list2))

输出:

[1, 2, 3, 2, 4]
2485711112520
2485710239496

注意:深拷贝为内存拷贝,开辟了新的内存空间

5.16 list(元组)

功能:将元组转为列表

>>> list1 = list((1, 2, 3, 4))
>>> print(list1)
[1, 2, 3, 4]

6.列表的遍历

6.1 使用for循环遍历列表

语法:

for 变量名 in 列表 :
​ 语句

功能:for循环主要用于遍历列表

遍历:指的是依次访问列表中的每一个元素,获取每个下标对应的元素值

说明:按照顺序获取列表中的每个元素,赋值给变量名,再执行语句,如此循环往复,直到取完列表中所有的元素为止

>>> list1 = ['hello', 78, '你好', 'good']
>>> for item in list1:
...   print(item)
... 
hello
78
你好
good

6.2 使用while循环遍历列表[使用下标循环]

语法:

下标 = 0
while 下标 < 列表的长度:
​ 语句
​ 下标 += 1

>>> list1 = ['hello', 78, '你好', 'good']
>>> index = 0
>>> while index < len(list1):
...   print(list1[index])
...   index += 1
... 
hello
78
你好
good

6.3 同时遍历下标与元素

语法:

for 下标,变量 in enumerate(列表)
​ 语句

>>> list1 = ['hello', 78, '你好', 'good']
>>> for index,item in enumerate(list1):
...   print(index, item)
... 
0 hello
1 78
2 你好
3 good

enumerate()[枚举]函数用于一个可遍历的数据对象(如列表,元组或者字符串)组合为一个索引序列,同时列出数据与数据下标,一般使用在for循环中
enumerate(obj, [start =0])
obj:一个可迭代对象
start:下标起始位置

7、List转dict

list1=[('a',1),('b',2),('c',3)]
dict1={k:v for k,v in list1}
dict2={v:k for k,v in list1}
print(dict1)
print(dict2)

输出:

{'a': 1, 'b': 2, 'c': 3}
{1: 'a', 2: 'b', 3: 'c'}

8、切片

8.1 一个冒号

list1=['a','b','c','d','e']
print('获取全部:',list1[:])
print('去头去尾:',list1[1:-1])
print('取[2,4)',list1[2:4])

输出:

获取全部: ['a', 'b', 'c', 'd', 'e']
去头去尾: ['b', 'c', 'd']
取[2,4) ['c', 'd']

冒号后面没有值则默认为list1的长度。

8.2两个冒号

冒号后面是步长,切片的步长默认为1,不可为0。

list1=['a','b','c','d','e']
print('获取全部:',list1[::])
print('列表倒置:',list1[::-1])
print('从下标0开始,步长为2',list1[::2])
print('从下标1开始,步长为2',list1[1::2])

输出:

获取全部: ['a', 'b', 'c', 'd', 'e']
列表倒置: ['e', 'd', 'c', 'b', 'a']
从下标0开始,步长为2 ['a', 'c', 'e']
从下标1开始,步长为2 ['b', 'd']

常用的是list1[::-1],列表倒置。

更多Python相关内容感兴趣的读者可查看本站专题:《Python列表(list)操作技巧总结》、《Python编码操作技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python的print用法示例
Feb 11 Python
python使用7z解压软件备份文件脚本分享
Feb 21 Python
Python2.x版本中基本的中文编码问题解决
Oct 12 Python
彻底理解Python list切片原理
Oct 27 Python
python ddt实现数据驱动
Mar 14 Python
Python实现读取字符串按列分配后按行输出示例
Apr 17 Python
pygame实现五子棋游戏
Oct 29 Python
Python实现ATM系统
Feb 17 Python
python3中sorted函数里cmp参数改变详解
Mar 12 Python
Django contrib auth authenticate函数源码解析
Nov 12 Python
matplotlib常见函数之plt.rcParams、matshow的使用(坐标轴设置)
Jan 05 Python
pytorch加载预训练模型与自己模型不匹配的解决方案
May 13 Python
Python3使用TCP编写一个简易的文件下载器功能
May 08 #Python
详解Python的三种可变参数
May 08 #Python
Python数据类型之Tuple元组实例详解
May 08 #Python
基于腾讯云服务器部署微信小程序后台服务(Python+Django)
May 08 #Python
python中正则表达式与模式匹配
May 07 #Python
详解Python3网络爬虫(二):利用urllib.urlopen向有道翻译发送数据获得翻译结果
May 07 #Python
python对象与json相互转换的方法
May 07 #Python
You might like
《魔兽争霸3:重制版》更新 多项视觉效果调整
2020/05/04 魔兽争霸
输出控制类
2006/10/09 PHP
swfupload 多文件上传实现代码
2008/08/27 PHP
PHP时间日期增减操作示例【date strtotime实现加一天、加一月等操作】
2018/12/21 PHP
关于laravel 数据库迁移中integer类型是无法指定长度的问题
2019/10/09 PHP
Alliance vs Liquid BO3 第三场2.13
2021/03/10 DOTA
Mootools 1.2教程 设置和获取样式表属性
2009/09/15 Javascript
javascript eval和JSON之间的联系
2009/12/31 Javascript
javascript new后的constructor属性
2010/08/05 Javascript
如何让页面在打开时自动刷新一次让图片全部显示
2012/12/17 Javascript
查找iframe里元素的方法可传参
2013/09/11 Javascript
JavaScript中for..in循环陷阱介绍
2013/11/12 Javascript
JS连连看源码完美注释版(推荐)
2013/12/09 Javascript
node.js操作mongoDB数据库示例分享
2014/11/26 Javascript
JS使用cookie实现DIV提示框只显示一次的方法
2015/11/05 Javascript
jQuery实现点击按钮文字变成input框点击保存变成文字
2016/05/09 Javascript
用js实现放大镜的效果的简单实例
2016/05/23 Javascript
react性能优化达到最大化的方法 immutable.js使用的必要性
2017/03/09 Javascript
详解AngularJS ng-class样式切换
2017/06/27 Javascript
Vue Element使用icon图标教程详解(第三方)
2018/02/07 Javascript
微信小程序数据分析之自定义分析的实现
2018/08/17 Javascript
在vue中使用express-mock搭建mock服务的方法
2018/11/07 Javascript
jQuery事件委托代码实践详解
2019/06/21 jQuery
vue 子组件和父组件传值的示例
2020/09/11 Javascript
[48:24]完美世界DOTA2联赛循环赛LBZS vs Forest 第一场 10月30日
2020/10/31 DOTA
Python实现简单登录验证
2016/04/13 Python
Google开源的Python格式化工具YAPF的安装和使用教程
2016/05/31 Python
python实现Adapter模式实例代码
2018/02/09 Python
Python面向对象实现一个对象调用另一个对象操作示例
2019/04/08 Python
Django框架搭建的简易图书信息网站案例
2019/05/25 Python
司机检讨书
2014/02/13 职场文书
乔丹名人堂演讲稿
2014/05/24 职场文书
最常使用的求职信
2014/05/25 职场文书
2015年招聘工作总结
2014/12/12 职场文书
node.js使用express-fileupload中间件实现文件上传
2021/07/16 Javascript
js中Object.create实例用法详解
2021/10/05 Javascript