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

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)

给存储元组的变量赋值


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,636评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,890评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,680评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,766评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,665评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,045评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,515评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,182评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,334评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,274评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,319评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,002评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,599评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,675评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,917评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,309评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,885评论 2 341