python基础篇(四)——Python数据类型之列表(中)

前言

  上篇文章给大家介绍了列表的相关知识。包括列表的概念以及列表的增删改查,最后还介绍了列表的排序和应用列表应该注意事项。本文给大家介绍列表的相关操作,包括遍历整个列表、创建数字列表等相关操作。首先给大家介绍遍历整个列表的相关知识。

一、遍历整个列表

  一般我们会经常需要列表的所有元素,对每个元素执行相同的操作。例如,我们在游戏中,可能需要将每个界面元素平移相同的距离;对于包含数字的列表,可能需要对每个元素执行相同的统计运算;在网站中,可能需要显示文章列表中的每个标题。需要对列表中的每个元素都执行相同的操作时,可使用Python中的for循环。
  假设我们有一个魔术师名单,需要将其中每个魔术师的名字都打印出来。为此,我们可以分别获取名单中的每个名字,但这种做法会导致多个问题。例如,如果名单很长,将包含大量重复的代码。另外,每当名单的长度发生变化时,都必须修改代码。通过使用for循环,可让Python去处理这些问题。
  下面使用for循环来打印魔术师名单中的所有名字,具体实现如下:

magicians = ['alice', 'david', 'carolina']
for magician in magicians:
    print(magician)

  从上面的代码可以得知:我们首先定义了一个列表。接下来,我们定义了一个for循环;这行代码让Python从列表magicians中取出一个名字,并将其存储在变量magician中。最后,我们让Python打印前面存储到变量magician中的名字。这样,对于列表中的每个名字,Python都将重复执行的代码。我们可以这样解读这段代码;对于列表magicians中的每位魔术师,都将其名字打印出来。输出很简单,就是列表中的所有姓名。具体执行结果如下:
python基础篇(四)——Python数据类型之列表(中)_第1张图片

1、深入地研究Python中的循环

  循环的概念在编程中很重要的,因为它是让计算机自动完成重复工作的常见方式之一。因此每门编程语言都会介绍循环这个知识点,但是Python的循环在书写格式上有一些变化,需要我们特别注意;我们在书写Python中的for循环的时候,一定要空格,一般是按四个空格键或者两个tab键即可,但是如果我们用pycharm写的话,它会自动帮我们缩进好的,这一点我们无需担心。在前面的代码中我们就简单地使用了循环语句。Python将首先读取其中的第一行代码:

for magician in magicians:

  这行代码让Python获取列表magicians中的第一个值(Alice),并将其存储到变量magician中,接下来,Python读取下一行代码:

    print(magician)

  它让Python打印magician的值——依然是Alice。鉴于该列表还包含其他值,Python返回到循环的第一行:

for magician in magicians:

  Python获取列表中的下一个名字——David,并将其存储到变量magician中,再执行下面这一行代码:

    print(magician)

  Python再次打印变量magician的值——当前为David。接下来,Python再次执行整个循环,对列表中的最后一个值——Carolina进行处理。至此,列表中没有其他的值了。因此Python接着执行程序的下一行代码。在这个示例中,for循环后面没有其他的代码,因此程序就此结束。
  我们一般初开始使用循环时请牢记,对列表的每个元素,都将执行循环指定的步骤,而不管列表包含多少个元素。如果列表包含一百万个元素,Python就重复执行指定的步骤一百万次,且通常速度非常快。
  另外,我们在编写for循环时,对于用于存储列表中每个值的临时变量,可指定任何名称。然而,选择描述单个列表元素的有意义的名称大有帮助。例如,对于小猫列表,像下面这样编写for循环的第一行代码是不错的选择:

for cat in cats:
for dog in dogs:
for item in list_of_items:

  这些命名约定有助于我们更好的明白for循环中将每个元素执行的操作。使用单数或复数式名称,可帮助我们判断代码段处理的是单个列表元素还是整个列表。

2、在for循环中执行更多的操作

  在for循环中,可对每个元素执行任何操作。下面来扩展前面的示例,对于每位魔术师,都打印一条消息,指出他的表演太精彩了。具体实现如下:

magicians = ['alice', 'david', 'carolina']
for magician in magicians:
    print(magician.title() + ", that was a great trick!")

  相比于前一个示例,唯一不同的是对于每位魔术师,都打印了一条以其名字为抬头的消息。这个循环第一次迭代时,变量magician的值为Alice,因此Python打印的第一条信息的抬头为Alice。第二次迭代时,消息的抬头为David,而第三次迭代时,抬头为 Carolina。具体的效果如下:
python基础篇(四)——Python数据类型之列表(中)_第2张图片
  通过上述的运行效果可知,对于列表的每位魔术师,都打印了一条个性化消息;在for循环中,想包含多少行代码都可以。在代码行for magician in magicians:后面,每个缩进代码行都是循环的一部分,且将针对列表的每个值都执行一次。因此,可对列表中的每个缩进的代码行都执行一次。因此,可对列表中的每个值执行任意次数的操作。接下来我们添加一行代码,告诉每位魔术师,我们期待下一次的表演,具体实现如下:

magicians = ['alice', 'david', 'carolina']
for magician in magicians:
    print(magician.title() + ", that was a great trick!")
    print("I can't wait to see your next trick, " + magician.title() + ".\n")

  从上面的代码可以看出:由于两条print语句都缩进了,因此它们都将针对列表中的每位魔术师执行一次。第二条print语句中的换行符"\n"在每次执行结束后都插入一个空行,从而整洁地将针对各位魔术师的消息编组,运行结果如下:
python基础篇(四)——Python数据类型之列表(中)_第3张图片
  在for循环中,想包含多少行代码都可以。实际上,我们会发现使用for循环对每个元素执行众多不同的操作是很有用的。

3、在for循环结束后执行一些操作

  在Python编译器中循环结束后应该做什么呢?通常,我们需要提供总结性输出或接着执行程序必须完成的其他任务。
  在for循环后面。没有缩进的代码表示只执行一次,而不会重复执行。下面来打印一条向全体魔术师致谢的消息,感谢他们的精彩表演。想要在打印给各位魔术师的消息后面执行一条给全体魔术师的致谢消息,需要将相应的代码放在for循环后面,且不缩进,具体代码如下:

magicians = ['alice', 'david', 'carolina']
for magician in magicians:
    print(magician.title() + ", that was a great trick!")
    print("I can't wait to see your next trick, " + magician.title() + ".\n")
print("Thank you, everyone. That was a great magic show!")

  我们从前面的代码中也看到了:开头两条print语句针对列表中的每位魔术师重复执行。然而,由于第三条print语句没有缩进,因此可执行一次,具体实现效果如下:

  我们在使用for循环处理数据是一种对数据集执行整体操作的不错的方式。例如,我们可能会使用for循环来初始化游戏——遍历角色列表,将每个角色都显示在屏幕上;再将循环后面添加一个不缩进的代码块,在屏幕上绘制所有角色后显示一个Play Now按钮。

二、避免缩进错误

  Python根据缩进来判断代码行与前一个代码行的关系。在前面的示例中,向各位魔术师显示消息的代码行是for循环的一部分,因为他们缩进了。Python通过使用缩进让代码整洁而结构清晰。在较长的Python过程中,我们将会看到缩进程度各不相同的代码块,这让你对程序的组织结构有大致的认识。
  当我们在开始编写必须正确缩进的代码时,需要注意一些常见的缩进错误。例如:有时候,程序员将不需要缩进的代码块缩进,而对于必须缩进的代码块却忘了缩进。通过查看这样的错误示例,有助于我们以后避开它们,以及在它们出现在程序中时进行修复。接下来给大家介绍Python中常见的缩进错误:

1、忘记缩进

  对于位于for语句后面且属于循环组成部分的代码行,一定要缩进。对于刚开始学习Python的读者,很容易忘记缩进,Pycharm会自动帮我们缩进的;但是如果我们用的是一般的Python解析器,就会提醒你代码有错,具体如下:

magicians = ['alice', 'david', 'carolina']
for magician in magicians:
print(magician.title() + ", that was a great trick!")

  print语句应缩进却没有缩进。Python没有找到期望缩进的代码块时,会让我们知道哪行代码有问题;执行以上代码会报以下的错误:
python基础篇(四)——Python数据类型之列表(中)_第4张图片
  通常情况下,如果我们用的是pycharm解析器的话,不用你缩进,只要你用for或者if语句的时候就会自动缩进。

2、忘记缩进额外的代码行

  有时候,循环能够运行而不会报告错误,但结果可能会出乎意料。试图在循环中执行多项任务,却忘记缩进其中的一些代码行时,就会出现这种情况。
  例如,如果忘记缩进循环中的第2行代码(它告诉每位魔术师,我们期待他的下一次表演),就会出现以下这种情况:

magicians = ['alice', 'david', 'carolina']
for magician in magicians:
    print(magician.title() + ", that was a great trick!")
print("I can't wait to see your next trick, " + magician.title() + ".\n")

  上述代码中的第二条print语句原本需要缩进,但Python发现for语句后面有一行代码是缩进的,因此他没有报过错误。最终的结果是:对于列表中的每位魔术师,都执行了第一条print语句,因为它缩进了;而第二条print语句没有缩进,因此它只在循环结束后执行一次。由于变量magician的终值为Carolina,因此只有她收到了消息looking forward to the next trick;具体执行效果如下:
python基础篇(四)——Python数据类型之列表(中)_第5张图片
  虽然代码没有报错,这是一个逻辑错误。从语法上看,这些Python代码是合法的,但由于存在逻辑错误,结果并不符合预期。如果我们预期某项操作将针对每个列表元素都执行一次,但它却只执行一次,请确定是否需要将一行或多行代码缩进。

3、不必要的缩进

  如果我们不小心缩进了无须缩进的代码行,Python将指出这一点,具体如下:

message = "Hello Python World!"
    print(message)

  print语句无需缩进,因为它并不属于前一行代码,因此Python将会指出这种错误:
python基础篇(四)——Python数据类型之列表(中)_第6张图片
  为避免意外缩进错误,请只缩进需要缩进的代码。在前面编写的程序中,只有要在for循环中对每个元素执行的代码需要缩进。

4、循环后不必要的缩进

  如果我们不小心缩进了应在循环结束后执行的代码,这些代码是针对每个列表元素重复执行。在有些情况下,这可能导致Python报告语法错误,但大多数情况下,这只会导致逻辑错误。例如,如果不小心缩进了感谢全体魔术师精彩表演的代码行,结果将会是怎样的呢?

magicians = ['alice', 'david', 'carolina']
for magician in magicians:
    print(magician.title() + ", that was a great trick!")
    print("I can't wait to see your next trick, " + magician.title() + ".\n")
    print("Thank you, everyone. That was a graat show!")

  由于第三个print语句代码行被缩进,它将针对列表中的每位魔术师执行一次,具体如下所示:

  这也是一个逻辑错误,与前面提到的类似。Python不知道你的本意,只要代码符合语法,它就会运行。如果原本只应执行一次的操作执行了多次,请确定你是否不应该缩进执行该操作的代码。

5、遗漏了冒号

  for语句末尾的冒号告诉Python,下一行是循环的第一行。

magicians = ['alice', 'david', 'carolina']
for magician in magicians
    print(magician.title() + ", that was a great trick!")
    print("I can't wait to see your next trick, " + magician.title() + ".\n")
    print("Thank you, everyone. That was a graat show!")

  如果你不下心遗漏了冒号,将导致语法错误,因为Python不知道你意欲何为。这种错误虽然易于消除,但并不那么容易发现。程序员为找出这样的单字符错误,花费时间多的令人瞠目结舌。这样的错误之所以难以发现,是因为通常在我们的意料之外。具体报错如下:
python基础篇(四)——Python数据类型之列表(中)_第7张图片

三、创建数字列表

  需要存储一组数字的原因有很多,例如,在游戏中,需要跟踪每个角色的位置,还可能需要跟踪几个玩者的最高得分。在数据可视化中,处理的几乎都是由数字(如温度、距离、人口数量、经度和纬度等)组成的集合。
  列表非常适合于存储数字集合,而Python提供了很多工具,可帮助你高效地处理数字列表。我们明白如何有效地使用这些工具后,即便列表包含数百万个元素,我们编写的代码也能运行的很好。

1、使用函数range()

  Python函数range()让我们能够轻松地生成一系列数字。例如,可以像下面这样使用函数range()来打印一系列数字:

for value in range(1,5):
    print(value)

  上述代码好像应该打印数字1~5,但实际上它不会打印数字5,打印效果如下:
python基础篇(四)——Python数据类型之列表(中)_第8张图片
  在这个示例中,range()函数只是打印了数字1~4,这是我们在编程语言中经常看到的差一行为的结果,函数range()让Python从我们指定的第一个值开始数,并在到达我们指定的第二个位置后停止,因此输出不包含第二个值(这里为5)。如果我们坚持要打印数字1~5,只需要将range(1,5)改为range(1,6)即可,具体如下:

for value in range(1,6):
    print(value)

  这样,输出将从1开始,到5结束,具体执行结果如下:
python基础篇(四)——Python数据类型之列表(中)_第9张图片

2、使用range()创建数字列表

  要创建数字列表,可使用函数list()range()的结果直接转换为列表。如果将range()作为list()的参数,输出将为一个数字列表。
  在前一节的示例中,我们打印了一系列数字。要将这些数字转换为一个列表,可使用list(),具体实现如下:

numbers = list(range(1,6))
print(numbers)

  执行结果如下:
python基础篇(四)——Python数据类型之列表(中)_第10张图片
  在使用函数 range()时,还可指定步长。例如,下面的代码打印1~10内的偶数时,实现如下:

even_numbers = list(range(2,11,2))
print(even_numbers)

  在这个示例中,函数range()从2开始数,然后不断地加2,直到达到或超过终值(11),因此输出结果如下:
python基础篇(四)——Python数据类型之列表(中)_第11张图片
  使用函数range()几乎能够创建任何需要的数字集,例如,如何创建一个列表,其中包含前10个整数(即1~10)的平方呢?在Python中,两个星号(**)表示乘方运算。下面代码演示了如何将前10个整数的平方加到一个列表中:

squares = []
for value in range(1,11):
    square = value** 2
    squares.append(square)
print(squares)

  首先,我们创建了一个空列表;接下来,使用函数range()让Python遍历1~10的值。在循环中,计算当前值的平方,并将结果存储到变量square中。然后,将新计算得到的平方值附加到列表squares末尾。最后,循环结束后,打印列表squares,具体执行结果如下:
python基础篇(四)——Python数据类型之列表(中)_第12张图片
  为了让这些代码更简洁,可不使用临时变量square,而直接将每个计算得到的值附加到列表末尾,具体实现如下:

squares = []
for value in range(1,11):
    squares.append(value**2)
print(squares)

  我们在创建更复杂的列表时,可使用上述两种方法中的任何一种。有时候,使用临时变量会让代码更易懂;而在其他情况下,这样做只会让代码无畏地变长。我们首先应该考虑的是:编写清晰易懂且能完成所需功能的代码;等到审核代码时,在考虑采用更高效的方法。
  当然,有几个专门用于处理数字列表的Python函数,我们可以用他们直接找出数字之间的最大值、最小值以及这些数字的总和,具体实现如下:

digits = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
print(min(digits))
print(max(digits))
print(sum(digits))

  执行的结果如下:
python基础篇(四)——Python数据类型之列表(中)_第13张图片

3、列表解析

  前面介绍的生成列表squares的方式包含三四行代码,而列表解析让你只需编写一行代码就能生成这样的列表。列表解析将for循环和创建新元素的代码合并成一行,并自动附加新元素。面向初学者一般是不会介绍这不是内容,本文之所以会涉及,就是为之后我们在阅读分析别人的代码时候很有可能会遇到这个知识点。下面的示例使用列表解析创建我们在前面看到的平方数列表,具体实现如下:

squares = [value**2 for value in range(1,11)]
print(squares)

  要使用这种语法,首先要指定一个描述性的列表名,如squares;然后,指定一个方括号,并定义一个表达式,用于生成我们要存储到列表中的值。在这个示例中,表达式为value**2,它计算平方值。接下来,编写一个for循环,用于给表达式提供值,再加上右方括号。在这个示例中,for循环为for value in range(1,11),它将值1~10提供给表达式value**2。请注意,这里的for语句末尾没有冒号。具体执行的结果如下所示:
python基础篇(四)——Python数据类型之列表(中)_第14张图片
  当我们初学者要创建自己的列表解析时,需要经过一定的练习,但能够熟练地创建常规列表后,我们会发现这样做是完全值得的。当我们觉得编写三四行代码来生成列表有点繁杂的时候,就应该考虑创建列表解析了。

总结

  上篇文章给大家介绍了列表的相关知识。包括列表的概念以及列表的增删改查,最后还介绍了列表的排序和应用列表应该注意事项。本文给大家介绍列表的相关操作,包括遍历整个列表、创建数字列表等相关操作。另外还介绍了在Python中初学者经常遇到的错误以及如何规避。Python是一门注重实际操作的语言,它是众多编程语言中最简单,也是最好入门的。当你把这门语言学会了,再去学习java、go以及C语言就比较简单了。当然,Python也是一门热门语言,对于人工智能的实现有着很大的帮助,因此,值得大家花时间去学习。生命不息,奋斗不止,我们每天努力,好好学习,不断提高自己的能力,相信自己一定会学有所获。加油!!!

你可能感兴趣的:(python,列表的遍历,range函数使用,列表解析,常见的一些错误,Python从入门到精通)