Python笔记_第一篇_面向过程_第一部分_5.Python数据类型之列表类型(list)
Python中序列是最基本的数据结构。序列中的每个元素都分配一个数字(他的位置或者索引),第一个索引是0,第二个索引是1,依次类推。Python的列表数据类型类似于C语言中的数组,但是不同之处在于列表数据类型可以包含任何类型的元素。列表示Python最常用的数据类型之一,他可以以作为一个方括号内的逗号分割值出现。像字符串一样也具有增删改查的操作。因此列表是一个有序集合。
注意:如果列表当中只有一个元素的时候,比如[12, ],需要加一个逗号。目的是一面误解成数学计算意义上的括号。
1. 列表的简单应用
1.1 创建列表
格式:列表名 = [列表选项1,列表选项2,列表选项n]
创建一个空列表和一个带有不同元素的列表
# 创建一个空列表
list1 = []
print(list1) # 输出结果: []
# 创建一个带有元素的列表
list1 = [1, ]
list2 = [18, 19, 20, 21, 22]
print(list1) # 输出结果:[1]
print(list2) # 输出结果:[18, 19, 20, 21, 22]
# 创建一个带有不同元素类型的列表
list3 = [18, 19, 20, "very", "good"]
print(list3) # 输出结果:[18, 19, 20, 'very', 'good']
1.2 列表的常规操作
1.2.1 列表元素的访问
同字符串一样通过下标来进行访问
# 列表元素的访问 #
list4 = [1, 2, 3, 4, 5]
print(list4[2])
print(type(list4[2]))
# 输出结果:
#
# <class 'int'>
1.2.2 列表元素的改变
通过下标的方式更改列表当中的某个值
# 列表元素的改变 #
list4 = [1, 2, 3, 4, 5]
list4[2] = 300
print(list4)
# 输出结果:[1, 2, 300, 4, 5]
1.2.3 列表元素的删除
# 列表元素的删除 #
list1 = ['physics', 'chemistry', 1997, 2000]
del list1[0]
print(list1)
# 输出结果:['chemistry', 1997, 2000]
1.2.4 列表的组合
# 列表组合
list5 = [1, 2, 3]
list6 = [4, 5, 6]
list7 = list5 + list6
print(list7)
# 输出结果:[1, 2, 3, 4, 5, 6]
1.2.5 列表的重复
# 列表的重复
list8 = [1, 2, 3]
print(list8 * 3)
# 输出结果:[1, 2, 3, 1, 2, 3, 1, 2, 3]
1.2.6 判断元素是否在列表中,返回值为False 或 True,成员运算符(in,not in);身份运算符同理不再举例
# 判断元素是否在列表中
list9 = [1, 2, 3, 4, 5]
print(3 in list9) # 输出结果:True
print(6 in list9) # 输出结果:False
print(6 not in list9) # 输出结果:True
1.2.7 列表的切片,与字符串切片原理相同
格式:[[start] [,end] [,step]],开始位置,结束位置,步长
注意:几到几的指针是放到元素的前面。
# 列表的截取(切片)
# 格式[[start] [,end] [,stet]], 开始位置、结束位置、步长
list10 = ["wuchao", "jinxing", "xiaohu", "sanpang", "ligang"]
print(list10[1:]) # 取到最后,默认步长是1
# 输出结果:['jinxing', 'xiaohu', 'sanpang', 'ligang'] print(list10[1:-1]) # 取到倒数第二个值,默认步长是1,-1正着取值,指针是放到"ligang"前面的,所以没有"ligang"
# 输出结果:['jinxing', 'xiaohu', 'sanpang'] print(list10[1:-1:1]) # 从左到右一个一个去取,步长为1
# 输出结果:['jinxing', 'xiaohu', 'sanpang'] print(list10[1::2]) # 从左到右各一个去取
# 输出结果:['jinxing', 'sanpang'] print(list10[::-1]) # 把整个表格反转过来
# 输出结果:['ligang', 'sanpang', 'xiaohu', 'jinxing', 'wuchao'] print(list10[::-1][1:3]) # 取列表中的后两个,第一步反转表格,第二步取前两个
# 输出结果:['sanpang']
1.2.8 二维列表和三维列表
二维列表和三维列表,以及其他高维列表的逻辑是在列表内在表示一组列表元素。访问也是通过双下标、三下标或高下标的方式访问,操作高维列表和操作一维列表的逻辑是一样的。
# 二维和三维列表 #
list11 = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print(list11[1][1]) # 也是按照下标访问三维列表第二组第二个元素
# 输出结果:5 list11[1][1] = 100
print(list11) # 改变数值与一位里列表一样
# 输出结果:[[1, 2, 3], [4, 100, 6], [7, 8, 9]]
2. 列表的常见内建函数的应用
函:append
语:append(x)
用:在列表末尾添加一个新的元素的第一个“元素”
# append
# 作用:在列表末尾添加新的元素的第一个“元素”
list12 = [1, 2, 3, 4, 5]
list12.append(6)
list12.append(7)
list12.append([7, 8, 9])
print(list12)
# 输出结果:[1, 2, 3, 4, 5, 6, 7, [7, 8, 9]]
函:extend
语:extend([list])
用:在列表末尾一次性追加一个列表中的多个值
# extend
# 作用:在列表末尾一次性追加一个列表中的多个值
list13 = [1, 2, 3, 4, 5]
list13.extend([6, 7, 8, 9, 10])
print(list13)
# 输出结果:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
函:insert
语:insert([index] [,x])
用:将数据添加到任意一个位置,在下标处添加一个元素,不覆盖原数据,原数据顺向后延。
# insert
# 作用:在下标处添加一个元素,不覆盖原数据,原数据顺向后延
list14 = [1, 2, 3, 4, 5]
list14.insert(0, 100) # 在第一个元素前追加一个100
print(list14)
# 输出结果:[100, 1, 2, 3, 4, 5]
函:pop、del
语:pop([index])、del list[index]
用:移除列表中下标处的元素(默认移除最后一个元素[-1]),并返回删除后的数据;删除列表规定下标的某一个元素。
# pop、del
# 作用:移除列表中下标处的元素(默认移除最后一个元素[-1]),并返回删除后的数据
list15 = [1, 2, 3, 4, 5]
list15.pop(-3) # 删除右边数第三个元素
del list15[0]
print(list15)
# 输出结果:[2, 4, 5]
函:remove
语:remove(x)
用:移除remove指定的元素、只能删除一个,估计当初设计整个函数的时候为了防止误删,所以只能删除一个
# remove
# 作用:移除remove指定的元素
list16 = [1, 2, 3, 4, 4, 5]
list16.remove(4) # 移除列表中某个元素第一个匹配结果
print(list16)
# 输出结果:[1, 2, 3, 4, 5]
函:clear
语:clear()
用:清除列表中的所有元素
# clear
# 作用:清除列表中所有的数据
list17 = [1, 2, 3, 4, 5]
list17.clear()
print(list17)
# 输出结果:[]
函:index
语:index(x [,start] [,end])
用:从列表中找出某个值的第一个匹配的索引值
# index
# 作用:从列表中找出某个值的第一个匹配的索引值
list18 = [1, 2, 3, 4, 5, 3, 4, 5, 6]
print(list18.index(3)) # 第一个匹配的位置,同字符串的性质一样如果么有返回报错
print(list18.index(3, 3, 7)) # 指定位置进行查找
# 输出结果:2 5
函:len
语:len(list)
用:获取列表的长度
# len
# 作用:获取列表的长度
list19 = [1, 2, 3, 4, 5, 3, 4, 5, 6]
print(len(list19))
# 输出结果:9
函:max、min
语:max(list)、min(list)
用:获取列表中的最大值、获取列表中的最小值
# max、min
# 作用:获取列表中的最大值、获取列表中的最小值
list20 = [1, 2, 3, 4, 5, 3, 4, 5, 6]
print(max(list20), min(list20))
# 输出结果:6 1
函:count
语:count(x)
用:统计某个元素在列表中出现的次数
# count
# 作用:统计某个元素在列表当中出现的次数
list21 = [1, 2, 3, 4, 5, 3, 4, 5, 6]
print(list21.count(3)) # 统计某个元素在列表当中出现的次数
# 输出结果:2
函:reverse
语:reserve()
用:列表中的元素按照倒序进行排列,如果本身序列按照规则就行排列,reverse函数这是是一个翻转函数(升序,变为逆序;逆序变为升序)
# reverse
# 作用:列表中的元素按照倒序排列
list22 = [1, 2, 3, 4, 5, 3, 4, 5, 6]
list22.reverse()
print(list22)
# 输出结果:[6, 5, 4, 3, 5, 4, 3, 2, 1]
函:sort
语:sort(list, key =, reverse = false/true)
用:默认为升序排列的排序方式,其中key可以按照某个键值方式进行排序,reverse可以调用逆序排序。
# sort
# 作用:排序(默认为升序排列)key=字符串用法,reverse=反转用法
list23 = [1, 2, 3, 4, 5, 3, 4, 5, 6]
list23.sort()
print(list23)
# 输出结果:[1, 2, 3, 3, 4, 4, 5, 5, 6] list23 = [1, 2, 3, 4, 5, 3, 4, 5, 6]
list23.sort(reverse=True) # 改为降序排列
print(list23)
# 输出结果:[6, 5, 5, 4, 4, 3, 3, 2, 1] list23 = [1, 2, 3, 4, 5, 3, 4, 5, 6]
list23.sort(reverse=False) # 默认为升序排列
print(list23)
# 输出结果:[1, 2, 3, 3, 4, 4, 5, 5, 6] list23 = ['Fast', 'Smooth', 'fast', 'is', 'is', 'smooth']
list23.sort(key=str.lower) # 忽略大小写排序
print(list23)
# 输出结果:['Fast', 'fast', 'is', 'is', 'Smooth', 'smooth'] list23 = ['Fast', 'Smooth', 'fast', 'is', 'is', 'smooth']
list23.sort(key = len) # 按字符串长度进行排序
print(list23)
# 输出结果:['Fast', 'fast', 'is', 'is', 'Smooth', 'smooth']
3. 深拷贝和浅拷贝
内存:
栈区和堆区
普通的变量都存在栈区,程序结束自动释放内存空间(系统自动分配,自动开辟,自动释放)
堆区(程序员手动开辟,手动释放,对象一般都存在堆区)
变量名存在栈区,通过地址0x1000去访问堆区的数据
list27 和 list28 地址一样,所以打印出来是一样。浅拷贝也叫引用拷贝。指向的是一个数据
深拷贝也叫内存的拷贝,全新的地址导致两个变量的指向不一样了。在堆区再开辟一片空间
举例说明:
# 浅拷贝举例
list27 = [1, 2, 3, 4, 5]
list28 = list27
list28[1] = 200
print(list28)
print(list27)
print(id(list28))
print(id(list27))
# 输出结果:
# [1, 200, 3, 4, 5]
# [1, 200, 3, 4, 5]
# 37310024
# 37310024
# 观察这两个列表的id没有发生变化 # 深拷贝举例
list29 = [1, 2, 3, 4, 5]
list30 = list29.copy()
list30[1] = 200
print(list29)
print(list30)
print(id(list29))
print(id(list30))
# 输出结果:
# [1, 2, 3, 4, 5]
# [1, 200, 3, 4, 5]
#
#
# 通过深拷贝两个列表的id已经发生变化了。
4. 列表常用技巧
4.1 前面的remove命令只能够移除一次需要移除的元素,通过下面的示例可以把需要移除的元素全部移除掉。
# 累计移除列表中指定的元素
list24 = [1, 2, 3, 4, 5, 3, 3]
num25 = 0
all = list24.count(3)
while num25 < all:
list24.remove(3)
num25 += 1
print(list24)
# 输出结果:
# [1, 2, 4, 5]
4.2 任意输出五个数,找出第二大的值。
# 任意输入5个数,找出第二大的值
listNum = []
num = 0
while num < 5:
val = int(input("请输入任意五个数: "))
listNum.append(val)
num += 1
print(listNum)
# 升序方法一
listNum.sort()
count = listNum.count(listNum[len(listNum) - 1])
# print(count)
c = 0
while c < count:
listNum.pop()
c += 1
print(listNum[len(listNum) - 1]) # 精准方法二
listnum = []
val = 0
num = 0
while num < 5:
val = int(input("请连续输入五个自然数:"))
listnum.append(val)
num += 1
print("您连续输入的数字为:" , listnum)
listnum.sort(reverse = True)
print("输入序列的长度为: %d" % len(listnum)) num1 = 0
while num1 < len(listnum)-1:
if listnum[num1 + 1] < listnum[num1]:
print("您输入序列中的第二大值为: %d" % listnum[num1 + 1])
break
num1 += 1
if listnum.count(listnum[0]) == len(listnum):
print("不存在第二大值,您输入的值都一样大")
# 输出结果1:
# 请连续输入五个自然数:10
# 请连续输入五个自然数:10
# 请连续输入五个自然数:20
# 请连续输入五个自然数:30
# 请连续输入五个自然数:50
# 您连续输入的数字为: [10, 10, 20, 30, 50]
# 输入序列的长度为: 5
# 您输入序列中的第二大值为: 30 # 输出结果2:
# 请连续输入五个自然数:10
# 请连续输入五个自然数:10
# 请连续输入五个自然数:10
# 请连续输入五个自然数:10
# 请连续输入五个自然数:10
# 您连续输入的数字为: [10, 10, 10, 10, 10]
# 输入序列的长度为: 5
# 不存在第二大值,您输入的值都一样大
4.3 列表的遍历
函:enumerate
语:enumerate(e, start = )
用:枚举函数,start= 表示从数字几开始记录枚举的起始,如果是0,就为0,1,2,3,4......为序号开始标记;如果为1,就为1,2,3,4,5,为序号开始标记;默认为从0开始。
# 列表的遍历
for i in [100, 200, 300, 400, 500]:
print(i, end=" ")
# 输出结果:100 200 300 400 500 # 通过枚举的方式遍历列表元素
for i, v in enumerate([100, 200, 300, 400, 500]):
print(i, v)
# 输出结果:
# 0 100
# 1 200
# 2 300
# 3 400
# 4 500
Python笔记_第一篇_面向过程_第一部分_5.Python数据类型之列表类型(list)的更多相关文章
- Python笔记_第一篇_面向过程_第一部分_2.内存详解
Python的很多教材中并没有讲内存方面的知识,但是内存的知识非常重要,对于计算机工作原理和方便理解编程语言是非常重要的,尤其是小白,因此需要把这一方面加上,能够更加深入的理解编程语言.这里引用了C语 ...
- Python笔记_第一篇_面向过程_第一部分_1.Python环境的设置(含虚拟机)
*Python环境的设置 Python的环境设置也就是所需工作平台的软件搭建.常用的搭建平台IOS系统+Linux系统和Windows+Linux系统的搭建.这里主要说明的是Windows+Linux ...
- Python笔记_第一篇_面向过程_第一部分_7.文件的操作(.txt)
在平时,我们不光要对程序内的代码进行输入和输出的操作,还要对程序外的文件进行和语言之间的交换.操作和运算.在基础部分,先讲解对于外部的.txt文件的操作. 第一部分 基本内容讲解 1. 什么是文件 ...
- Python笔记_第一篇_面向过程_第一部分_6.条件控制语句(if)
Python正如其他语言一样存在两种常用的逻辑判断体(也叫结构化程序设计).所谓逻辑判断体是通过你想要完成的编程思路,通过在逻辑判断体中的相互判断和作用得到你想要的结果.逻辑判断体也叫控制语句,Pyt ...
- Python笔记_第二篇_面向过程_第二部分_2.路径、栈和队列、内存修改
这一部分分三个主题进行讲解,主要为后面的模块.包.第三方库的概念补充一些相关的内容. 1. 路径(Path): 相对路径和绝对路径. 举例1:我们先导入一个os库(模块)来观察一下路径 import ...
- 四、java基础-面向过程_对象_类中可出现的因素
1.面向过程和面向对象区别: 1)面向过程:开发一个应用程序.一个项目,必须先了解整个过程,了解各个步骤.模块间的因果关系,使的面向过程方式去开发程序时,代码和代码之间的关联程度是非常强.所以其中任何 ...
- python自动化开发-[第五天]-面向过程、模块、包
今日概要: 1.内置模块 2.协程函数 3.递归 4.面向过程编程与函数编程 5.模块 6.包 7.re正则 一.内置模块 1.匿名函数lambda 定义:匿名函数通常是创建了可以被调用的函数,它返回 ...
- python第四周迭代器生成器序列化面向过程递归
第一节装饰器复习和知识储备------------ 第一节装饰器复习和知识储备------------ def wrapper(*args,**kwargs): index(*args,**kwa ...
- [Python笔记]第八篇:模块
本篇主要内容:python常用模块用法介绍 什么是模块 模块,用一大段代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性 ...
- [Python笔记]第三篇:深浅拷贝、函数
本篇主要内容:深浅拷贝,自定义函数,三目运算,lambda表达式, 深浅拷贝 一.数字和字符串 对于 数字 和 字符串 而言,赋值.浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址. import ...
随机推荐
- SpringBoot+SpringSecurity之多模块用户认证授权同步
在之前的文章里介绍了SpringBoot和SpringSecurity如何继承.之后我们需要考虑另外一个问题:当前微服务化也已经是大型网站的趋势,当我们的项目采用微服务化架构时,往往会出现如下情况: ...
- HDU 5464:Clarke and problem
Clarke and problem Accepts: 130 Submissions: 781 Time Limit: 2000/1000 MS (Java/Others) Memory L ...
- 二十三、CI框架之post
一.在控制器里面代码如下: 二.在View里面写好按钮和需要post的代码 三.效果如下,点击按钮之前: 点击按钮之后, 不忘初心,如果您认为这篇文章有价值,认同作者的付出,可以微信二维码打赏任意金额 ...
- 高次同余方程 $BSGS$
第一篇\(Blog\)... 还是决定把\(luogu\)上的那篇搬过来了. BSGS,又名北上广深 它可以用来求\(a^x \equiv b (mod \ n)\)这个同余方程的一个解,其中\(a, ...
- 干货|浅谈iOS端短视频SDK技术实现
短视频SDK主要包含"视频录制"和"视频编辑"这两个核心功能. 视频录制包括:视频采集.美颜.滤镜.摄像头切换.视音频采集参数设置等功能: 视频编辑包括:视频导 ...
- OO第三单元“技术”博客
主要针对第三单元的三次作业 JML语言的理论基础.应用工具链情况 JML指的是Java建模语言,全称是Java modeling language,是一种行为接口规范语言,可用于指定Java模块的行为 ...
- ODBC OLEDB
ODBC OLEDB https://www.cnblogs.com/dachuang/p/8615754.html
- matplotlib画图--Line Color
1.线形 2.标记 3.颜色
- cat <<EOF> file
.多行导入文件(新建文件或者覆盖文件内容) cat << EOF > abcd.txt Hello! This is a test file! Test for cat and ...
- PHP 框架: CodeIgniter 分页教程
PHP 框架: CodeIgniter 分页教程 分类: PHP2009-04-23 11:09 3209人阅读 评论(0) 收藏 举报 框架phpbooksdatabaseurl数据库 目录(?)[ ...