人生苦短,我学Python(二)

相关链接

Python编程学习笔记(一)


2.2 列表的操作

2.2.1 列表的遍历

  • 循环
    列表的遍历是通过for循环的办法实现的,实现方法如下:
players = ["Messi","Ronaldo","Neymar","Mbappe","Wulei"]
for player in players:
    print(player)
Messi
Ronaldo
Neymar
Mbappe
Wulei

注意:Python和C/C++/Java编程语言在基本语句编写上的一个明显的不同点,就是Python在每个语句的结尾处是没有类似于C/C++/Python中的“;”这样的代表一句语句结束的标志的,Python是通过换行和不同的缩进来识别一个语句的结束或是某些语句是否在某一循环体中,例如上面的例子,在上面这段代码当中,可以明显的看到print(player)前面是有一个缩进的单位的,这样缩进之后意味着这个语句是属于上面的for循环的循环体中的语句;相反的,如果该语句前面没有缩进,就代表该语句是循环体外的语句。

2.2.2 for循环

for循环是我们在编程过程中较早接触的循环结构,也是我们比较常用的一个循环语句,接下来对for循环的一些特性和在python中的写法做出一些说明

  • 我们早早在C/C++语言当中就曾经接触过这种循环结构,循环结构是用来重复的完成一系列重复的工作的实现方式,避免我们为重复的操作而敲大量的代码。

  • 在上面我们已经初步使用了python的for循环语句,比较容易发现在python当中是没有像C/C++语言当中的{ }这样的规定循环体的范围的标识的,在Python当中,我们用缩进来表示一段代码是否属于某一函数体/循环体, 比如在for循环的语句当中,for语句末尾会有“:”代表此语句之后的带有比for语句多一个缩进单位的语句是属于该for循环的循环体的,而此后的第一个和for循环语句前的缩进单位相同的语句出现代表for循环的循环体截止于此语句之前

  • 只看文字的说明会比较晦涩,可以直接参考下面的例子:

players = ["Messi","Ronaldo","Neymar","Mbappe","Wulei"]
for player in players:
    print(player+" is one of the best football players in the world!")
print("That's all")
Messi is one of the best football players in the world!
Ronaldo is one of the best football players in the world!
Neymar is one of the best football players in the world!
Mbappe is one of the best football players in the world!
Wulei is one of the best football players in the world!
That's all
  • 我们可以明显的看到,“*** is one of the best football players in the world”这个字符串的print语句前比for语句多一个缩进,所以这个字符串的输出在for循环的循环体当中,被重复的输出多次。而“That’s all”这个字符串的输出语句前的缩进和for语句是相同的,此时代表循环体已经结束,所以“That’s all”就只输出一次。
  • 在Python当中我们一定要注意我们使用的空格和tab缩进,因为Python语言的特性,Python的开发者想要让这中编程语言尽可能的简洁容易,所以类似这样的结构的区分都是通过缩进来区别的 ,我们在学习的时候就应该注意我们编写代码的规范性和整洁性(虽然我很多时候都不是特别注意),这在Python语言当中异常重要,在其他语言中,代码不整洁可能不会影响程序的运行,只会影响代码的可读性,但在Python当中,不好的代码编写习惯可能会导致程序无法运行,出现报错。
  • 重要的事情说三遍:希望大家养成代码整洁的好习惯!希望大家养成代码整洁的好习惯!希望大家养成代码整洁的好习惯!

2.2.3 数值列表

  • 此前我们多数讨论的是字符串类型的列表,但是我们在实际解决问题的时候,无论是我们的程序设计,还是Python比较擅长的数据分析等领域,都不可避免的会遇到大量的数字,所以我们也要掌握处理数字的一些方式。列表非常适合用于储存数据的集合,并且Python中的很多工具都能让我们更方便快捷的处理数据。接下来介绍几种基本的和数值列表有关的函数和方法。

range()

  • range()函数可以一次性的生成一系列数字,可以根据传入的参数控制生成的一系列数字的范围。
  • range()函数只能处理整型数据

具体使用的方式如下:

for value in range(1,5):
    print(value)
for value in range(1,10,2):
    print(value)
1
2
3
4
1
3
5
7
9
  • 在这里我们发现我们规定的范围是1-5,但是程序运行后只输出了1-4的数值,这是因为我们所设置的范围range(1,5) 是指从1开始递增到5停止,所以当value==5时就已经跳出循环,此时是不执行循环体的,所以输出的范围就只有1-4.
  • 在range()函数当中,我们不仅仅能生成连续的数字序列,我们还可以指定步长生成一定范围内的等差数列,凭借此特性,我们可以通过range()函数更方便的生成我们想要得到的数字序列。

我们不单单可以用range()函数进行一些列连续数字序列的输出,也可以通过range()函数创建一个连续数字序列的数字列表,这时候我们还要用到一个新的函数list(),通过这两个函数进行连续数字序列的数字列表的创建,具体实现方法如下:

numbers = list(range(1,6))
print(numbers)
[1, 2, 3, 4, 5]
  • 我们的list()函数中传入的就是一个序列,list()函数会将它转换成一个列表的形式,直接赋值给一个列表变量。

2.2.4 数字列表的简单统计方法

我们在日常的学习工作中可能会很多的遇到需要将大量的数据进行数据处理的场景,这时候python的一些方便的操作就能帮助我们更高效的完成这些原理简单的操作,但是在其他高级编程语言中很少会直接提供这样便利的数据统计的函数或方法,尽管这些简单的操作实现原理很简单,但毕竟相比其他语言还是可以减少好几行的代码量,长此以往python的编写简洁性会更受到青睐。

接下来说明数字列表的最简单的几种统计方法:

  • 最大值:max()
  • 最小值:min()
  • 求和:sum()
numbers = [7,3,5,1,9,2,10,6,8,4]
print(min(numbers))
print(max(numbers))
print(sum(numbers))
1
10
55

2.2.5 列表的切片

我们在日常列表的使用当中,可能会遇到只需要列表的一部分的情况,在其他语言的类似结构的操作中,我们只能通过for循环和对索取部分的限定条件取得序列的一部分,但幸运的是,Python语言为我们提供了直接得到列表的一部分的方法,这种方法就是列表切片
和range()函数的使用方法类似,我们使用切片时的方法如下:

players = ["Messi","Ronaldo","Neymar","Mbappe","Wulei"]
print(players[1:4])
print(players[:4])
print(players[1:])
print(players[-5:-2])
print(players[4:1])
['Ronaldo', 'Neymar', 'Mbappe']
['Messi', 'Ronaldo', 'Neymar', 'Mbappe']
['Ronaldo', 'Neymar', 'Mbappe', 'Wulei']
['Messi', 'Ronaldo', 'Neymar']
[]
  • 在上面的使用方法中,我们用players[1:4]代表列表的一部分切片,“[ ]”中的数字意思是索引的开始和结束的数值,当然我们也可以选择不指定索引,如果起始值不指定就代表从头开始,同理,如果截至值不指定就代表在列表结尾处切片。
    在此处需要说明的是,切片的范围规定的原则和range()也十分类似,我们规定的结束索引处的元素并不会被包含在列表切片当中,大家在进行列表切片时一定要对列表切片的边界进行检查
  • 值得一提的是,在刚开始学习列表时我们使用过“-2”这种复数的索引值代表列表的倒数第二个数,在这里是一样可以使用的。
  • 如果我们规定的起始和截止值不符合正常的逻辑,比如我们规定[4:1]这样的切片,此时并不会出现报错,但我们得到的是一个空列表。

列表的切片本质上就是一个列表,所以我们针对列表的操作对列表切片同样适用
根据这样的原则,我们同样可以对列表切片进行遍历或单一数据的访问等操作,同时我们也可以通过对切片起始和结束点的规定进行列表的复制等操作。
具体实现方法和列表的正常操作基本相同,接下来举例其中的几个操作,不过多赘述。

players = ["Messi","Ronaldo","Neymar","Mbappe","Wulei"]
for player in players[1:5]:
    print(player)
lista = players[:4]
print(lista)
listb = players
print(listb)
Ronaldo
Neymar
Mbappe
Wulei
['Messi', 'Ronaldo', 'Neymar', 'Mbappe']
['Messi', 'Ronaldo', 'Neymar', 'Mbappe', 'Wulei']
  • 在此处需要说明的是,如果想要得到一整个列表的复制,可以通过list[:]这种方式复制,同时,也可以通过更加简便的直接使用列表的名称进行复制。

2.2.6 元组

在这里引入一个新的有关列表的概念,我们正常定义和使用的列表在程序的运行过程当中,其元素是可改变的,也就是说,我们可以随时改变列表内的某个元素的值(value)。但在实际的程序编写运行解决问题的过程中,我们有时可能会需要建立一个不可被改变的序列,此时我们就需要元组来满足我们的需求。
元组的基本使用方法如下:

numbers = (10,20)
print(numbers[0])
print(numbers[1])
for number in numbers:
    print(number)
10
20
10
20
  • 我们在使用查询相关的操作时,元组的操作和列表几乎没有什么区别,元组的特性就是其元素的值不能被随便改变,如果一定要改变元组中元素的值,唯一的办法就是重新初始化元组
numbers = (10,20)
print(numbers)
numbers = (10,100)
print(numbers)
(10, 20)
(10, 100)

3.1 if 语句

3.1.1 判断语句

在我们学习计算机编程语言的过程中,我们会接触到各种结构,比如:顺序结构、循环结构等,而if语句所涉及到的结构就是选择结构, 我们可以使用判断语句判断目前我们所处的情况,并根据我们判断的结果继续进行相应的操作
下面是一个简单的示例:

cars = ["audi", "bmw", "honda", "toyota", "benz"]
for car in cars:
    if car == "bmw":
        print(car.upper())
    else:
        print(car)
audi
BMW
honda
toyota
benz
  • 我们通过这样的一个判断结构,当品牌是BMW时我们就大写输出,否则就直接输出,判断是否是BMW品牌,这就是判断的过程,并根据判断结果选择接下来的操作。
  • 上面只是我们的一个简单的例子,接下来我们从头开始对if语句和选择结构做出一些说明

3.1.2 条件测试

在我们用到if语句需要判断某个条件的时候,我们总是需要判断某样事物是否符合某个条件,而在我们的计算机语言当中,因为计算机内都是二进制代码,所以我们更多的使用真或假来判断是否符合某个条件,也就是说,我们的条件都具有真或假的性质。
比如下面的例子:

car = "bmw"
car == "bmw"
True
  • 我们看到上面的例子当中,我们先定义了一个字符串,随后我们用“==”符号,代表进行了一次比较操作,这样的操作后会返回该次条件测试的真假,比如比较操作,返回规则就是完全相同为真,不同就为假。
  • 类似于这样的条件测试,我们还可以有更多的条件限定方式,例如不等于,数字之间的比较等等。
  • 我们也可以使用andor来连接多个条件,来满足我们对判断条件的需求。
    • and代表且,相当于C/C++中的&&
    • or代表或,相当于C/C++中的||

具体实例如下:

car = "bmw"
print(car != "bmw")
num = 18
print(num < 18)
print(num <= 18)
if num < 21 and  num>=18:
    print(1)
if num < 21 or num > 50:
    print(2)
False
False
True
1
2
  • 除此之外,Python还直接提供了直接检查某特定值是否存在于某列表内的语句,并不像其他语言一样需要我们自行遍历比较,我们可以检查某特定的值是否包含或不包含在某个列表当中。

具体使用方法如下:

cars  = ["bmw", "audi", "toyota", "honda"]
"benz" in cars
False
cars  = ["bmw", "audi", "toyota", "honda"]
"bens" not in cars
True

这里我们简单的使用了innot in的语句,在日常的使用中,我们更多的会把它当作if当中的判断条件使用,而不是单独的出现。

3.1.3 布尔表达式

在这一部分的讲述和演示当中我们经常会看到True和False的形式,在此对布尔型做出一个简单的说明,因为布尔型比较容易理解而且我们在其他的语言中也一定对此有过接触,所以就一带而过,简单说说。

  • 布尔型变量是一种只有两种取值的数据类型,它只有真(True)和假(False)两种情况
  • 因为其只有两种情况,所以其只占二进制的一位,是最简单的数据类型
  • 布尔型的真假之间是对立关系,非真即假,非假即真。
  • 我们一般使用布尔表达式记录状态

3.1.4 if 语句

在这一部分开始到现在,我们已经铺垫了很多有关判断语句,条件测试等内容,而这些内容在我们日常的使用中一般是直接结合if语句进行使用的,很少会出现单独使用的情况,所以if语句的使用才是这一部分的关键所在,也是我们接触的比较基础的且常用的语句之一。
在我们学习其他的语言的时候,相信大家都曾接触过有关if语句的使用,也对if语句有一个基本的了解,在Python当中,if语句的基本使用也和其他语言当中的使用方法差别不是特别大。使用方法如下:

test = True
if test:
    print("yes")
yes

在这样一个简单的示例中,我们展示了if语句的最基本使用方法,可以明显看到if后的条件需要反馈给我们一个布尔表达式,方便我们为接下来的操作做出选择。
当然,仅仅对返回True的条件进行操作在我们平时的使用时是远远不够的,所以我们引入了if-elseif-elif-else操作,如果你之前有过其它语言的编程基础,你也一定对这种形式有一些熟悉,这样的使用方式和C/C++当中的if-else if-else的使用方法是几乎相同的。
具体的使用实例如下:

age = 20
if age >= 18:
    print("you are an adult")
else:
    print("you are under age")
you are an adult
  • 最普通的if-else结构代表如果条件测试的反馈结果如果为假,我们就会执行else当中的操作。

接下来是if-elif-else语句,这是if语句的最复杂的形式,可以完成很多层if语句嵌套的效果,这也为我们的条件测试提供了更多的选择,我们可以直接对条件进行一个基本的分类,选择他们分别进行不同的操作:

grade = 95
if grade > 90:
    print("you get A")
elif grade >= 80 and grade < 90:
    print("you get B")
elif grade >= 70 and grade < 80:
    print("you get C")
elif grade >= 60 and grade < 70:
    print("you get D")
else:
    print("sorry,you get E")
you get A
  • 这样的判断结构的执行原理就是从最开始的条件测试依次执行,当符合条件时就执行当前条件测试所对应的语句,执行后直接结束判断。反之继续向下判断,如果所有的if,elif都不符合,就执行else中所对应的操作,然后结束判断。
  • 所以在这样的执行原理之下,我们就要设计好我们的判断顺序,我们可以在后续的判断中忽略掉一些前面的条件测试已经限定过的条件,但一定要注意条件限定的先后顺序,如果不能很好的把握这样的规则,那就将条件测试的限定写的尽量详细无歧义,这样的话条件测试的先后顺序就显得不那么重要了。
  • 在if语句的这一部分,我们发现我们的写法和for循环是有一些相似的,同样是冒号和冒号后的缩进来代表不同代码段之间的关系,在if语句中比较特殊的是,我们在同一段if-elif-else语句中(有些可能没有elif甚至else,但是都遵守这样的规则),中间是不能插入和if、elif、else同样缩进的语句的,我们只能将操作涵盖在某个条件测试之中,不可以在判断过程中独立执行if-elif-else语句之外的语句,如果有必要的语句需要执行,请写在if系列操作之前或之后,或写在条件测试的操作中。
  • 我们在if、elif、else的条件测试部分是可以使用and,or来连接多个条件的,但是在真正编写代码的时候,还是要注意要尽量保证自己的代码整洁,保证可读性。

3.1.5 判断语句与列表

列表是Python语言的一个很常用的工具,所以我们对列表的一些操作也要力求简单方便,针对列表内的一些检查和筛选,我们还是要用到判断语句,来方便我们对列表进行一些整理操作。
比如下面的这个简单的例子:

nums = [12,54,76,99,34,123,654,385]
for num in nums:
    if num%2 == 0:
        nums.remove(num)
print(nums)
[54, 99, 123, 385]

在上述的例子当中,我们使用了for循环和if语句的嵌套,结合列表的基本操作,将列表当中的所有偶数都删除掉,最终的列表当中就仅剩奇数,上述的例子在实际的运行当中是有逻辑上的一个小问题的,大家也可以自己思考一下问题所在和解决方法,但是为了让大家能够容易理解,就还是忽略问题保留这个形式比较简单的示例了。
上面的例子实际上不过是多种结构的嵌套,而对于列表来说,在python中我们还可以通过判断语句直接判断列表是否为空,操作方法如下:

cars = []
if cars:
    print("not empty")
else:
    print("empty")
empty

我们在这一部分学习了众多的操作,而在我们实际应用的过程中,我们很有可能会综合型的用到我们平时零散的内容,但所有的应用规则都是不变的,我们只需要在编写程序的时候灵活的把我们需要用到的结构或是语句结合到一起即可。


本文所在系列:Python编程学习笔记

Python编程学习笔记(一):数据类型;列表基础;函数、方法、语句辨析;
Python编程学习笔记(二):列表操作;判断语句(if);
Python编程学习笔记(三):字典;


写在文末的话

这次更新拖得有一点久…以后争取保证至少每周一更,督促自己学习,如果本文对您有帮助的话可以点赞或收藏,谢谢大家!
本文的讲解忽略了一些比较基础的名词的解释,如果有问题或发现错误可以回复或私信博主,讲述的顺序主要是参照了图灵图书的《Python编程:从入门到实践》,推荐大家购买正版的纸质或电子版书籍。
转载请注明出处。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值