习题 32: 循环和列表

现在你应该有能力写更有趣的程序出来了。如果你能一直跟得上,你应该已经看出将“if 语句”和“布尔表达式”结合起来可以让程序作出一些智能化的事情。

然而,我们的程序还需要能很快地完成重复的事情。这节习题中我们将使用 for-loop (for 循环)来创建和打印出各种各样的列表。在做的过程中,你会逐渐明白它们是怎么回事。现在我不会告诉你,你需要自己找到答案。

在你开始使用 for 循环之前,你需要在某个位置存放循环的结果。最好的方法是使用列表(list),顾名思义,它就是一个按顺序存放东西的容器。列表并不复杂,你只是要学习一点新的语法。首先我们看看如何创建列表:

hairs = ['brown', 'blond', 'red']
eyes = ['brown', 'blue', 'green']
weights = [1, 2, 3, 4]

你要做的是以 [ (左方括号)开头“打开”列表,然后写下你要放入列表的东西,用逗号隔开,就跟函数的参数一样,最后你需要用 ] (右方括号)结束右方括号的定义。然后 Python 接收这个列表以及里边所有的内容,将其赋给一个变量。

Warning

对于不会编程的人来说这是一个难点。习惯性思维告诉你的大脑大地是平的。记得上一个练习中的 if 语句嵌套吧,你可能觉得要理解它有些难度,因为生活中一般人不会去像这样的问题,但这样的问题在编程中几乎到处都是。你会看到一个函数调用另外一个包含 if 语句的函数,其中又有嵌套列表的列表。如果你看到这样的东西一时无法弄懂,就用纸笔记下来,手动分割下去,直到弄懂为止。

现在我们将使用循环创建一些列表,然后将它们打印出来。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
the_count = [1, 2, 3, 4, 5]
fruits = ['apples', 'oranges', 'pears', 'apricots']
change = [1, 'pennies', 2, 'dimes', 3, 'quarters']

# this first kind of for-loop goes through a list
for number in the_count:
    print "This is count %d" % number

# same as above
for fruit in fruits:
    print "A fruit of type: %s" % fruit

# also we can go through mixed lists too
# notice we have to use %r since we don't know what's in it
for i in change:
    print "I got %r" % i

# we can also build lists, first start with an empty one
elements = []

# then use the range function to do 0 to 5 counts
for i in range(0, 6):
    print "Adding %d to the list." % i
    # append is a function that lists understand
    elements.append(i)

# now we can print them out too
for i in elements:
    print "Element was: %d" % i

你应该看到的结果

$ python ex32.py
This is count 1
This is count 2
This is count 3
This is count 4
This is count 5
A fruit of type: apples
A fruit of type: oranges
A fruit of type: pears
A fruit of type: apricots
I got 1
I got 'pennies'
I got 2
I got 'dimes'
I got 3
I got 'quarters'
Adding 0 to the list.
Adding 1 to the list.
Adding 2 to the list.
Adding 3 to the list.
Adding 4 to the list.
Adding 5 to the list.
Element was: 0
Element was: 1
Element was: 2
Element was: 3
Element was: 4
Element was: 5
$

加分习题

  1. 注意一下 range 的用法。查一下 range 函数并理解它。
  2. 在第 22 行,你可以可以直接将 elements 赋值为 range(0,6),而无需使用 for 循环?
  3. 在 Python 文档中找到关于列表的内容,仔细阅读以下,除了 append 以外列表还支持哪些操作?

常见问题回答

如何创建二维列表?

就是在列表中包含列表,例如这样: [[1,2,3],[4,5,6]]

列表和数组不是一样的吗?

取决于语言和实现方式。从经典意义上理解的话,列表和数组是很不同的,因为它们的实现方式不同。在 Ruby 语言中列表和数组都被叫做数组,而在 Python 中又都叫做列表。现在我们就把它叫列表吧,因为 Python 里就是这么叫的。

为什么 for-loop 可以使用未定义的变量?

循环开始时这个变量就被定义了,当然每次循环它都会被重新定义一次。

为什么 for i in range(1, 3): 只循环 2 次而非 3 次?

range() 函数会从第一个数到最后一个,但不包含最后一个数字。所以它在 2 的时候就停止了,而不会数到 3。这种含首不含尾的方式是循环中及其常见的一种用法。

elements.append() 是什么功能?

它的功能是在列表的尾部追加元素。打开 Python 命令行,创建几个列表试验一下。以后每次碰到自己不明白的东西,你都可以在 Python 的交互式命令行中实验一下。

Project Versions

Table Of Contents

Previous topic

习题 31: 作出决定

Next topic

习题 33: While 循环

This Page