收集起来-列表之双重列表数据表,,


  双重列表:数据表

  考虑数据如何存储在程序中时,可以用图直观地表示,这很有用。

  变量有一个值。

  与孩子一起学编程-python教程

  列表就像是把一行值串在一起。

  与孩子一起学编程-python教程

  有时还需要一个包含行和列的表。

  与孩子一起学编程-python教程

  如何保存数据表呢?我们已经知道,列表中包含多个元素,可以把每个学生的成绩放在一个列表中,像这样:

  与孩子一起学编程-python教程

  或者对应每个课程使用一个列表,如下:

  与孩子一起学编程-python教程

  不过我们可能希望把所有数据都收集到一个数据结构中。

  术语箱

  数据结构(data structure)是一处在程序中收集、存储或表示数据的方法。数据结构包括变量、列表和其他一些我们还没有讨论到的内容,实际上,数据结构这个词就表示程序中数据的组织方式。

  要为我们的成绩建立一个数据结构,可以这样做:

  与孩子一起学编程-python教程

  这会得到一个元素列表,其中每个元素本身又是一个列表,我们创建了一个“列表的列表”(list of list),也就是双重列表,classMarks列表中的每个元素本身又都是一个列表。

  还可以直接创建classMarks,而不需要先创建joemarks、tomMarks和bethMarks,如下:

  与孩子一起学编程-python教程

  现在来显示我们的数据结构:classMarks有3个元素,每个元素分别对应一个学生,所以可以使用in来循环处理:

  与孩子一起学编程-python教程

  这里我们对名为classMarks的列表完成循环处理,循环处理是studentMarks。每次循环时,会打印列表中的一个元素。这里的每一个元素分别是一个学生的成绩,它本身也是一个列表。(前面创建过这些学生列表)

  可以注意到,这看上去与前一面的表很类似,所以我们提出的这种数据结构可以把所有数据都保存在一个地方。

  从表获取一个值

  怎么得到这个表(也就是双重列表)中的值呢?我们已经知道,第一个学生的成绩(joeMarks)在一个列表中,而这个列表本身是classMarks中的第一个元素。下面来检查一下:

  与孩子一起学编程-python教程

  classMarks[0]是Joe的4门课程成绩的一个列表。现在我们想从classMarks[0]得到一个值。怎么做呢?可以使用第二个索引。

  如果希望得到他的第三个成绩(阅读课成绩),也就是索引2,可以这样做:

  与孩子一起学编程-python教程

  这会给出classMarks中的第一个元素(索引0),也就是Joe的成绩列表,以及这个列表中的第三个元素(索引2),这正是他的阅读课成绩,看到一个名字后面带着两组中括号时,比如说classMarks[0][2],这往往表示一个双重列表。

  与孩子一起学编程-python教程

  classMarks列表并不知道Joe、Tom和Beth这些名字,也不知道数学(Math)、科学(Science)、阅读(Reading)和拼写(Spelling)这些课程。这里之所以这样标,是因为我们知道想要在这个列表中储存什么信息,不过对于Python来说,它们只是列表中一些已经编号的位置而已。这就像邮局里编号的邮箱,邮箱上没有名字,只有编号,邮递员只负责明确哪封信归哪个邮箱,而你知道哪个邮箱是你的。

  与孩子一起学编程-python教程

  要对classMarks标签,一种更准确的方法应该是这样:

  与孩子一起学编程-python教程

  现在可以更容易地看出成绩77存储在classMarks[0][2]中。

  如果编写一个程序使用classMarks存储我们的数据,就必须知道哪些数据存储在哪一行哪一列。就像邮递员一样,我们的任务是明确哪个位置属于个数据。

  你学到了什么

  在这一章,你学到了以下内容。

  列表是什么

  如何向列表中增加元素

  如何从列表删除元素

  如何确定列表是否包含某个值

  如何对列表排序

  如何建立列表的副本

  元组

  双重列表

  测试题

  向列表增加元素有哪些方法?

  从列表删除元素有哪些方法?

  要得到一个列表的有序副本,但又不能改变原来的列表,有哪两种方法?

  怎样得出某个值是否在列表中?

  如何确定某个值在列表中的位置?

  什么是元组?

  如何建立双重列表?

  如何从一个双重列表中得到一个值?

  动手试一试

  写一个程序,让用户提供5个名字。程序要把这5个名字保存在一个列表中,最后打印出来,就像这样:

  与孩子一起学编程-python教程

  修改第1题的程序,要求不仅显示原来的名字列表,还要显示出排序后的列表。

  修改第1题程序,要求只显示用户键入的第3个名字,就像这样:

  与孩子一起学编程-python教程

  修改第1的程序,让用户替换其中一个名字,用户应该能选择要替换哪个名字,然后键入新名字,最后显示这个新的列表:

  与孩子一起学编程-python教程

评论关闭