Python学习(二)列表,for循环,切片,元组_列表和for循环-程序员宅基地

技术标签: python  Python知识学习  列表  元组  

Python学习(二)

列表

列表由一系列按照特定顺序排列的元素组成,列表中可以存放字母,数字,字符串等几乎所有的元素,其中的元素之间没有任何关系,列表与一维数组有些类似。

在Python中,用方括号[]来表示列表,并且用逗号来分割元素。下面给出具体的示例:

mobilephones = ["苹果","华为","三星","小米","oppo","vivo"]
print(mobilephones)			# ['苹果', '华为', '三星', '小米', 'oppo', 'vivo']

但是这种输出我们通常没法直接使用列表中的元素,在接下来主要学习对列表的一系列操作。

访问列表元素

列表是一个有序集合,如果想要访问列表中的元素,只要将列表中元素的索引告诉Python解释器即可,即指出列表的名称,再指出元素的索引,并将其放在方括号里。

需要注意的是,列表的索引是从0开始的,因此要访问列表的任何元素,只需要将其位置减一,将结果作为索引即可。

mobilephones = ["苹果","华为","三星","小米","oppo","vivo"]
print(mobilephones[1])			#华为

上边我们可以看出输出结果不再包含方括号和引号,这时我们可以直接对输出结果进行操作,如下:

mobilephones = ["苹果","华为","三星","小米","oppo","vivo"]
print(mobilephones[4].upper())			#OPPO

可以看出小写的oppo被转换为大写的OPPO。

特殊的,Python为最后一个列表元素提供了一个特殊语法,通过将索引值设定为-1,可以让Python返回最后一个元素的值,同样的基于此,我们可以递减索引,使用索引值-2返回倒数第二个元素的值。

mobilephones = ["苹果","华为","三星","小米","oppo","vivo"]
print(mobilephones[-1])				#vivo
print(mobilephones[-2])				#oppo
print(mobilephones[4])				#oppo

从上边看出索引值-2和索引值4返回了同样的结果。

因此我们在使用索引调用列表中的元素时,既可以从左向右从0开始依次加1来使用索引,也可以从右向左从-1开始依次减一来使用索引。

修改列表元素

如果要修改列表中的元素,首先要指定列表名和要修改元素的索引,再使用新的值替换原来的值。

#如下mobliephones列表,可以使用下述方法将苹果转换为Apple

mobilephones = ["苹果","华为","三星","小米","oppo","vivo"]
mobilephones[0] = "Apple"
print(mobilephones)				#['Apple', '华为', '三星', '小米', 'oppo', 'vivo']

可以从打印结果看到,苹果已经成功被替换为Apple,可以采用这种办法修改列表中其他元素的值。

在列表中插入元素

在列表末尾插入元素

通常使用append()方法在列表的末尾加入元素,具体如下:

mobilephones = ["苹果","华为","三星","小米","oppo","vivo"]
mobilephones.append("一加")
mobilephones.append("中兴")
print(mobilephones)			#['苹果', '华为', '三星', '小米', 'oppo', 'vivo', '一加', '中兴']

在列表中插入元素

使用insert()方法可以在列表的任何位置添加新的元素,为此需要设定新元素的索引和值。

mobilephones = ["苹果","华为","三星","小米","oppo","vivo"]
mobilephones.insert(2,"中兴")
print(mobilesphones)		#['苹果', '华为', '中兴', '三星', '小米', 'oppo', 'vivo']

如上所示,成功在索引值为2的元素插入了新值,同样的,之前的索引值为2的元素及其之后的元素向右移动一位。

删除列表元素

使用del语句删除元素

如果知道要删除的元素在列表中的具体位置,可以使用del语句:

mobilephones = ["苹果","华为","三星","小米","oppo","vivo"]
print(mobilephones)			#['苹果', '华为', '三星', '小米', 'oppo', 'vivo']
del mobilephones[2]
print(mobilephones)			#['苹果', '华为', '小米', 'oppo', 'vivo']

可以看到索引为2的三星在列表中被成功删除。

需要注意的时del是一个语句,而非方法,因此使用时没有括号。

使用pop()删除元素

使用del语句从列表中删除元素后就没办法继续使用元素的值,但是我们有时候希望既能删除某个元素的值,又可以在删除后使用这个元素一次,这个时候我们可以使用pop()方法。

mobilephones = ["苹果","华为","三星","小米","oppo","vivo"]
print(mobilephones)					#['苹果', '华为', '三星', '小米', 'oppo', 'vivo']
last_element = mobilephones.pop()
print(last_element)					#vivo
print(mobilephones)					#['苹果', '华为', '三星', '小米', 'oppo']

从上边我们可以看出使用pop后最后一个元素确实已经不在列表中了,同时我们可以使用被删除的元素进行新的操作。

使用pop()方法也可以删除列表中任意位置的元素,只需要在括号中指定要删除的元素的索引即可。

mobilephones = ["苹果","华为","三星","小米","oppo","vivo"]
print(mobilephones)					#['苹果', '华为', '三星', '小米', 'oppo', 'vivo']
del_element = mobilephones.pop(3)
print(del_element)					#小米
print(mobilephones)					#['苹果', '华为', '三星', 'oppo', 'vivo']

可以看出索引值为3的小米被成功删除了,同时我们可以使用被删除的元素。

根据值删除元素

如果我们只知道要删除元素的值而不知道要删除的元素的具体位置,可以使用remove()方法来删除列表中的元素。

mobilephones = ["苹果","华为","三星","小米","oppo","vivo"]
del_element = "华为"
mobilephones.remove(del_element)
print(mobilephones)							#['苹果', '三星', '小米', 'oppo', 'vivo']

可以看出元素"华为"已经被成功删除,同时需要注意的是下属代码是:

mobilephones = ["苹果","华为","三星","小米","oppo","vivo"]
del_element = mobilephones.remove("华为")
print(del_element)			#none
print(mobilephones)			#['苹果', '三星', '小米', 'oppo', 'vivo']

可以看出由于我们一开始就知道被删除的是什么值,所以可以直接使用该值。如果remove这个元素,并不能把remove的元素的值赋值给其他变量,如上第二行和第三行显示,输出结果为none。

对列表进行排序

通常情况下,列表中元素的排序是无法预测的,但在对列表进行操作时我们会经常希望列表中的元素是有顺序的,因此,Python提供了sort()方法和sorted()函数对列表进行排序。

# sort()方法会永久改变列表中元素的顺序

name = ["yuntianhe","hanlingsha","murongziying","liumengli"]
name.sort()
print(name)		#['hanlingsha', 'liumengli', 'murongziying', 'yuntianhe']

#我们也可以按照字母顺序从大到小进行排序,只需要向sort()方法传递reverse参数,并且使参数的值等于True

name = ["yuntianhe","hanlingsha","murongziying","liumengli"]
name.sort(reverse = True)
print(name)		#['yuntianhe', 'murongziying', 'liumengli', 'hanlingsha']

#sorted()函数可以按照特定顺序显示元素,并且不会破坏他们在列表中的原始顺序

name = ["yuntianhe","hanlingsha","murongziying","liumengli"]
print(sorted(name))		#['hanlingsha', 'liumengli', 'murongziying', 'yuntianhe']
print(name)				#['yuntianhe', 'hanlingsha', 'murongziying', 'liumengli']

#也可以向函数sorted()传递参数reverse = True,来按照字母从大到小的顺序进行排序。

方法和函数的区别:

大多数情况下方法需要具体的对象来调用,而函数需要向里边传入需要处理的对象。

逆序打印列表

如果想反转列表中元素的顺序,可以使用reverse()方法。

mobilephones = ["苹果","华为","三星","小米","oppo","vivo"]
mobilephones.reverse()
print(mobilephones)			#['vivo', 'oppo', '小米', '三星', '华为', '苹果']

#如果想恢复到原来的顺序,再对列表使用一次reverse方法即可。

获取列表的长度

使用函数len()可以快速获得列表的长度,Python计算列表长度时从1开始进行计算的。

mobilephones = ["苹果","华为","三星","小米","oppo","vivo"]
len = len(mobilephones)
print(len)			#6

列表索引错误

如果对于一个包括4个元素的列表,却希望获得第五个元素,就会出现以下错误:

name = ["yuntianhe","hanlingsha","murongziying","liumengli"]
print(name[4])

'''
IndexError: list index out of range
表明这个是索引错误,输入的索引值超过了列表的范围。
'''

for循环

for循环的基本格式

Python中的for循环与其他语言中不太相同,Python的for循环主要是为了顺序遍历对象中的每个值,对于Python中的for循环,不需要设置步进值,它会自动循环,直到处理的对象中的元素被全部读取。下边给出了for循环的一个示例:

mobilephones = ["苹果","华为","三星","小米","oppo","vivo"]
for mobilephone in mobilephones:
    print(mobilephone)				#语句1
    print(1)						#语句2

#	苹果1	华为1	三星1	小米1	oppo1	vivo1

'''
for循环的执行过程;
首先从列表mobilephones中读取第一个元素的值,存入变量mobilephone中,接下来执行循环体的部分,其中在Python中循环体部分并不是通过花括号表示,而是通过缩进,循环下边连续的缩进一个单位的语句都属于循环体的部分,会被依次执行,如上所示,语句1和语句2属于同一个循环体。在第一个元素的值执行完后,会将列表中第二个元素的值保存到mobilephone中,再执行,直到处理到列表的最后一个元素。
'''

在循环结束后执行操作

上一部分,我们提到过循环后边连续的缩进一个单位的语句均属于循环体的一部分,因此如果想在循环结束后执行某些操作,只需要将代码放在for循环后边,并且不进行缩进即可。

mobilephones = ["苹果","华为","三星","小米","oppo","vivo"]
for mobilephone in mobilephones:
    print(mobilephone)				#语句1
print("手机的品牌好多啊")				#语句2
'''
苹果
华为
三星
小米
oppo
vivo
手机的品牌好多啊
'''

可以看到语句1被执行了6次,而语句2仅被执行一次。

for循环的常见错误

忘记缩进

对于for循环语句且后边属于循环组成部分的代码行,一定要进行缩进。

mobilephones = ["苹果","华为","三星","小米","oppo","vivo"]
for mobilephone in mobilephones:
print(mobilephone)
'''
print(mobilephone)	
   ^
IndentationError: expected an indented block
如上,系统会提示你缩进错误,没有找到期望的缩进的代码块。
'''

与下边循环后进行了不要的缩进类似,如果__忘记缩进循环体中额外的代码行__,往往不会使Python报错,只会使语句的输出出现逻辑错误,出现这种问题时要仔细查看代码之间的缩进,来进行解决。

进行了不必要的缩进

mobilephones = ["苹果","华为","三星","小米","oppo","vivo"]
	print(mobilephones)
    
'''
print(mobilephones)
    ^
IndentationError: unexpected indent
可见提示第二行多了不必要的缩进
'''

#循环后如果进行了不必要的缩进,会出现以下情况:

mobilephones = ["苹果","华为","三星","小米","oppo","vivo"]
for mobilephone in mobilephones:
    print(mobilephone)
    print("手机的品牌好多啊")
    
'''
苹果
手机的品牌好多啊
华为
手机的品牌好多啊
三星
手机的品牌好多啊
小米
手机的品牌好多啊
oppo
手机的品牌好多啊
vivo
手机的品牌好多啊

这种问题编译器不会报错,但是不符合输出的逻辑,因此出现这种问题时需要仔细查看代码的缩进值。
'''

遗漏冒号

for语句末尾的冒号是为了告诉Python,下一行是循环的第一行,如果遗漏了冒号,会出现以下错误:

mobilephones = ["苹果","华为","三星","小米","oppo","vivo"]
for mobilephone in mobilephones
    print(mobilephone)
    
'''
for mobilephone in mobilephones
                              ^
SyntaxError: invalid syntax
这个会提示语法错误,我们需要仔细排查来解决这个问题。
'''

数值列表

使用range()函数生成一系列数字

Python中的range()函数可以生成一系列连续的数字:

for value in range(1,5):
    print(value)
'''
1
2
3
4
'''

可以看出使用range()函数生成的数,是从第一个指定的数开始,到最后一个指定的数-1结束。

在使用range()函数创建列表时也可以指定步进值,如下:

for value in range(1,5,2):
    print(value)
'''
1
3
'''

如上,可以看出我们创建了从1开始步进为2,直到到达4的数数值。

range()函数生成的数字转换为数字列表

可以使用list()函数将range()的结果直接转换为列表

numbers = list(range(1,5))
print(numbers)					#[1, 2, 3, 4]

对数字列表简单的统计

使用max(),min(),sum()函数,可以轻松的得到数字列表的最大值,最小值,总和。

numbers = list(range(1,5))
print(max(numbers))				#4
print(min(numbers))				#1
print(sum(numbers))				#10

列表解析

列表解析是指将for循环和创建新元素的代码合并成一行,并自动附加新元素:

numbers = [number**2 for number in range(1,5)]
print(numbers)				#[1, 4, 9, 16]

#上述代码创建了一个1-4的数值,并计算数值的平方,将计算后的结果放到列表中,它与下边的代码是等价的

numbers = []
for number in range(1,5):
    numbers.append(number**2)
print(numbers)					#[1, 4, 9, 16]

可以看出列表解析可以减少有关的代码行数,要使用列表解析,首先需要指定一个列表名,如numbers,然后指定一个左括号,并定义一个表达式,用于生成要存储的值,接下来编写一个for循环用来给表达式提供值,最后再加上右括号即可。

切片

切片是指获取列表中的部分元素。要创建切片,就要指定要使用的第一个元素和最后一个元素的索引,与range()函数相同的时,切片在到达指定的第二个索引前边的元素停止。如下,提取了列表第2~3个元素:

mobilephones = ["苹果","华为","三星","小米","oppo","vivo"]
print(mobilephones[1:3])			#['华为', '三星']

在进行切片时,也可以使用我们前边提到的负数索引的形式:

mobilephones = ["苹果", "华为", "三星", "小米", "oppo", "vivo"]
print(mobilephones[-3:-1])			#['小米', 'oppo']

可以看出上边我们使用负数索引的方式提取了第4~5个元素。

同时正数索引和负数索引能混合使用,但是要保证索引值小的在前。如果没有指定起始索引,Python将从头开始提取,如果没有指定结束索引,Python将会一直提取到列表末尾。

遍历切片

如果要遍历切片中的元素,可以使用for循环对切片进行遍历:

mobilephones = ["苹果", "华为", "三星", "小米", "oppo", "vivo"]
for mobile in mobilephones[1:5]:
    print(mobile)

'''
华为
三星
小米
oppo
'''

复制列表

要复制列表,可以创建一个全新的包括整个列表的切片,方法是同时省略起始索引和终止索引,如下可以看出此时有两个列表。

mobilephones = ["苹果", "华为", "三星", "小米", "oppo", "vivo"]
new_mobilephones = mobilephones[:]
print(new_mobilephones)			#['苹果', '华为', '三星', '小米', 'oppo', 'vivo']
new_mobilephones.append("魅族")
print(mobilephones)				#['苹果', '华为', '三星', '小米', 'oppo', 'vivo']
print(new_mobilephones)			#['苹果', '华为', '三星', '小米', 'oppo', 'vivo', '魅族']

需要注意的时,如果是为了创建一个新的列表,我们不能直接把一个列表赋值给另一个列表,而应该通过切片的形式来创建。如下:

mobilephones = ["苹果", "华为", "三星", "小米", "oppo", "vivo"]
new_mobilephones = mobilephones
print(new_mobilephones)			#['苹果', '华为', '三星', '小米', 'oppo', 'vivo']
new_mobilephones.append("魅族")
print(mobilephones)				#['苹果', '华为', '三星', '小米', 'oppo', 'vivo', '魅族']
print(new_mobilephones)			#['苹果', '华为', '三星', '小米', 'oppo', 'vivo', '魅族']

从上边的对比可以看出如果采用赋值的方式创建列表,本质上并没有生成新的列表,而是把原始的列表共享给新列表,此时实际上还是只有一个列表。

元组

元组和列表类似,但是是使用圆括号来进行表示,与列表一样,元组也是使用索引来访问元素。元组的特点是,元组中的元素是不能被修改的。

#如下,定义了一个元组
numbers = (100,20)
#可以通过索引值获取元组中的元素,索引值格式和列表相同
print(numbers[0])					#100
print(numbers[1])					#20

#如果尝试修改元组的值,就会出现以下错误
numbers[0] = 20

'''
    numbers[0] = 20
TypeError: 'tuple' object does not support item assignment
提示我们元组类型的数据不支持修改
'''

遍历元组的所有值

与列表类似,元组也使用for循环遍历所有元素:

numbers = (100,20)
for number in numbers:
    print(number)
'''
100
20
'''

修改元组变量

虽然不能修改元组变量中的值,但是可以给元组变量重新赋值,如果想修改numbers元组中的值,可以重新定义:

numbers = (100,20)
print(numbers)				#(100, 20)

numbers = (500,100)
print(numbers)				#(500, 100)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_43191451/article/details/116919768

智能推荐

c# 调用c++ lib静态库_c#调用lib-程序员宅基地

文章浏览阅读2w次,点赞7次,收藏51次。四个步骤1.创建C++ Win32项目动态库dll 2.在Win32项目动态库中添加 外部依赖项 lib头文件和lib库3.导出C接口4.c#调用c++动态库开始你的表演...①创建一个空白的解决方案,在解决方案中添加 Visual C++ , Win32 项目空白解决方案的创建:添加Visual C++ , Win32 项目这......_c#调用lib

deepin/ubuntu安装苹方字体-程序员宅基地

文章浏览阅读4.6k次。苹方字体是苹果系统上的黑体,挺好看的。注重颜值的网站都会使用,例如知乎:font-family: -apple-system, BlinkMacSystemFont, Helvetica Neue, PingFang SC, Microsoft YaHei, Source Han Sans SC, Noto Sans CJK SC, W..._ubuntu pingfang

html表单常见操作汇总_html表单的处理程序有那些-程序员宅基地

文章浏览阅读159次。表单表单概述表单标签表单域按钮控件demo表单标签表单标签基本语法结构<form action="处理数据程序的url地址“ method=”get|post“ name="表单名称”></form><!--action,当提交表单时,向何处发送表单中的数据,地址可以是相对地址也可以是绝对地址--><!--method将表单中的数据传送给服务器处理,get方式直接显示在url地址中,数据可以被缓存,且长度有限制;而post方式数据隐藏传输,_html表单的处理程序有那些

PHP设置谷歌验证器(Google Authenticator)实现操作二步验证_php otp 验证器-程序员宅基地

文章浏览阅读1.2k次。使用说明:开启Google的登陆二步验证(即Google Authenticator服务)后用户登陆时需要输入额外由手机客户端生成的一次性密码。实现Google Authenticator功能需要服务器端和客户端的支持。服务器端负责密钥的生成、验证一次性密码是否正确。客户端记录密钥后生成一次性密码。下载谷歌验证类库文件放到项目合适位置(我这边放在项目Vender下面)https://github.com/PHPGangsta/GoogleAuthenticatorPHP代码示例://引入谷_php otp 验证器

【Python】matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距-程序员宅基地

文章浏览阅读4.3k次,点赞5次,收藏11次。matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距

docker — 容器存储_docker 保存容器-程序员宅基地

文章浏览阅读2.2k次。①Storage driver 处理各镜像层及容器层的处理细节,实现了多层数据的堆叠,为用户 提供了多层数据合并后的统一视图②所有 Storage driver 都使用可堆叠图像层和写时复制(CoW)策略③docker info 命令可查看当系统上的 storage driver主要用于测试目的,不建议用于生成环境。_docker 保存容器

随便推点

网络拓扑结构_网络拓扑csdn-程序员宅基地

文章浏览阅读834次,点赞27次,收藏13次。网络拓扑结构是指计算机网络中各组件(如计算机、服务器、打印机、路由器、交换机等设备)及其连接线路在物理布局或逻辑构型上的排列形式。这种布局不仅描述了设备间的实际物理连接方式,也决定了数据在网络中流动的路径和方式。不同的网络拓扑结构影响着网络的性能、可靠性、可扩展性及管理维护的难易程度。_网络拓扑csdn

JS重写Date函数,兼容IOS系统_date.prototype 将所有 ios-程序员宅基地

文章浏览阅读1.8k次,点赞5次,收藏8次。IOS系统Date的坑要创建一个指定时间的new Date对象时,通常的做法是:new Date("2020-09-21 11:11:00")这行代码在 PC 端和安卓端都是正常的,而在 iOS 端则会提示 Invalid Date 无效日期。在IOS年月日中间的横岗许换成斜杠,也就是new Date("2020/09/21 11:11:00")通常为了兼容IOS的这个坑,需要做一些额外的特殊处理,笔者在开发的时候经常会忘了兼容IOS系统。所以就想试着重写Date函数,一劳永逸,避免每次ne_date.prototype 将所有 ios

如何将EXCEL表导入plsql数据库中-程序员宅基地

文章浏览阅读5.3k次。方法一:用PLSQL Developer工具。 1 在PLSQL Developer的sql window里输入select * from test for update; 2 按F8执行 3 打开锁, 再按一下加号. 鼠标点到第一列的列头,使全列成选中状态,然后粘贴,最后commit提交即可。(前提..._excel导入pl/sql

Git常用命令速查手册-程序员宅基地

文章浏览阅读83次。Git常用命令速查手册1、初始化仓库git init2、将文件添加到仓库git add 文件名 # 将工作区的某个文件添加到暂存区 git add -u # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,不处理untracked的文件git add -A # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,包括untracked的文件...

分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120-程序员宅基地

文章浏览阅读202次。分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120

【C++缺省函数】 空类默认产生的6个类成员函数_空类默认产生哪些类成员函数-程序员宅基地

文章浏览阅读1.8k次。版权声明:转载请注明出处 http://blog.csdn.net/irean_lau。目录(?)[+]1、缺省构造函数。2、缺省拷贝构造函数。3、 缺省析构函数。4、缺省赋值运算符。5、缺省取址运算符。6、 缺省取址运算符 const。[cpp] view plain copy_空类默认产生哪些类成员函数

推荐文章

热门文章

相关标签