python编程 | 第四章 操作列表(和元组)

2019-12-02  本文已影响0人  DOGBRO

python编程系统学习指路:快速学习 | python编程:从入门到实践 | Windows

1 遍历整个列 for

下面使用for 循环来打印魔术师名单中的所有名字:

magicians = ['alice', 'david', 'carolina']

for magician in magicians:

    print(magician)

for 循环

1.1 深入地研究循环

循环这种概念很重要,因为它是让计算机自动完成重复工作的常见方式之一。例如,在前面的 magicians.py 中使用的简单循环中,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:

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

magicians = ['alice', 'david', 'carolina']

for magician in magicians:

    print(magician.title() + ", that was a great trick!")

相比于前一个示例,唯一的不同是对于每位魔术师,都打印了一条以其名字为抬头的消息。这个循环第一次迭代时,变量magician 的值为'alice',因此Python打印的第一条消息的抬头为'Alice' 。第二次迭代时,消息的抬头为'David' ,而第三次迭代时,抬头为'Carolina' 。

在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")

for循环

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

在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!")

不缩进只打印一次

2 创建数值列表

2.1 使用函数range()

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

for value in range(1,5):

    print(value)

上述代码好像应该打印数字1~5,但实际上它不会打印数字5:

使用函数range() 来打印一系列的数字

在这个示例中,range() 只是打印数字1~4,这是你在编程语言中经常看到的差一行为的结果。函数range() 让Python从你指定的第一个值开始数,并在到达你指定的第二个值 后停止,因此输出不包含第二个值(这里为5)。 要打印数字1~5,需要使用range(1,6) :

2.2 使用range() 创建数字列表

要创建数字列表,可使用函数list() 将range() 的结果直接转换为列表。如果将range() 作为list() 的参数,输出将为一个数字列表。

numbers = list(range(1,6))

print(numbers)

使用range() 创建数字列表

使用函数range() 时,还可指定步长。例如,下面的代码打印1~10内的偶数:

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

print(even_numbers)

使用函数range() 时指定步长

使用函数range() 几乎能够创建任何需要的数字集,例如,如何创建一个列表,其中包含前10个整数(即1~10)的平方呢?在Python中,两个星号(** )表示乘方运算。

squares = []

for value in range(1,11):

    square = value**2

    squares.append(square)

print(squares)

打印列表含1-10的平方

(PS:这里书上错了,print(squares)缩进了,就会得到10个列表:)

2.3 对数字列表执行简单的统计计算

有几个专门用于处理数字列表的Python函数。例如,你可以轻松地找出数字列表的最大值、最小值和总和:

最大、最小、和

2.4 列表解析

前面介绍的生成列表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 语句末尾没有冒号。

3 使用列表的一部

以处理列表的部分元素——Python称之为切片。

3.1 切片 

要创建切片,可指定要使用的第一个元素和最后一个元素的索引。与函数range() 一样,Python在到达你指定的第二个索引前面的元素后停止。要输出列表中的前三个元素,需 要指定索引0~3,这将输出分别为0 、1 和2 的元素。

players = ['charles', 'martina', 'michael', 'florence', 'eli']

print(players[0:3])

切片

你可以生成列表的任何子集,例如,如果你要提取列表的第2~4个元素,可将起始索引指定为1 ,并将终止索引指定为4 :

players = ['charles', 'martina', 'michael', 'florence', 'eli']

print(players[1:4])

如果你没有指定第一个索引,Python将自动从列表开头开始:

players = ['charles', 'martina', 'michael', 'florence', 'eli']

print(players[:4])

要让切片终止于列表末尾,也可使用类似的语法。例如,如果要提取从第3个元素到列表末尾的所有元素,可将起始索引指定为2 ,并省略终止索引:

players = ['charles', 'martina', 'michael', 'florence', 'eli']

print(players[2:])

无论列表多长,这种语法都能够让你输出从特定位置到列表末尾的所有元素。本书前面说过,负数索引返回离列表末尾相应距离的元素,因此你可以输出列表末尾的任何切片。 例如,如果你要输出名单上的最后三名队员,可使用切片players[-3:] :

players = ['charles', 'martina', 'michael', 'florence', 'eli']

print(players[-3:])

3.2 遍历切片

如果要遍历列表的部分元素,可在for 循环中使用切片。

players = ['charles', 'martina', 'michael', 'florence', 'eli']

print("Here are the first three players on my team:")

for player in players[:3]:     

    print(player.title())

遍历切片

3.3 复制列表

要复制列表,可创建一个包含整个列表的切片,方法是同时省略起始索引和终止索引([:] )。这让Python创建一个始于第一个元素,终止于最后一个元素的切片,即复制整个列表。

my_foods = ['pizza', 'falafel', 'carrot cake']

friend_foods = my_foods[:] 

print("My favorite foods are:") 

print(my_foods) 

print("\nMy friend's favorite foods are:") 

print(friend_foods)

4 元祖

列表非常适合用于存储在程序运行期间可能变化的数据集。列表是可以修改的,这对处理网站的用户列表或游戏中的角色列表至关重要。然而,有时候你需要创建一系列不可修改的元素,元组可以满足这种需求。Python将不能修改的值称为不可变的,而不可变的列表被称为元组。 

4.1 定义元组

元组看起来犹如列表,但使用圆括号而不是方括号来标识。定义元组后,就可以使用索引来访问其元素,就像访问列表元素一样。

dimensions = (200, 50)

print(dimensions[0]) 

print(dimensions[1])

使用索引访问元组元素

下面来尝试修改元组dimensions 中的一个元素,看看结果如何:

试图修改第一个元素的值,导致Python返回类型错误消息。由于试图修改元组的操作是被禁止的,因此Python指出不能给元组的元素赋值。

4.2 遍历元组中的所有值

dimensions = (200, 50)

for dimension in dimensions:   

    print(dimension)

遍历元组中所有的值

4.3 修改元组变量

虽然不能修改元组的元素,但可以给存储元组的变量赋值。

dimensions = (200, 50)

print("Original dimensions:") 

for dimension in dimensions:     

    print(dimension)

dimensions = (400, 100)

print("\nModified dimensions:") 

for dimension in dimensions:     

    print(dimension)

给存储元组的变量赋值


上一篇下一篇

猜你喜欢

热点阅读