练习 34 获取列表元素
列表(list)真的非常有用,前提是你要能获取到它们里面的内容。你已经能够按顺序遍历列表中的元素,但是如果你要取其中的第5个元素,你该怎么操操做?你需要知道如何获取一个列表里面的元素。下面是如何获取列表中第一个元素的方法:
animals = ['bear', 'tiger', 'penguin', 'zebra']
bear = animals[0]
你创建了一个动物列表,然后用 0 来取列表的第一个元素?!为什么呢?因为数学就是这样的,Python 列表的第一个元素是从序号 0 开始,而不是从 1 开始。这样虽然看起来有点奇怪,但是好处多多。
最好的解释可能是它反映了人使用数字和程序使用数字的区别。
想象一下你正在观察列表中的四个动物(熊,老虎,企鹅,斑马)赛跑,它们纷纷冲过了终点线,我们也得到了它们的次序。比赛非常激烈,因为最终它们都没有吃掉彼此。你的一个朋友来晚了,他想知道哪个动物胜出了。他肯定会说“谁得了第一名?”而不是“谁是第零个?”
这是因为动物们的次序非常重要。你不能在没有第一名的情况下就有第二名,同理没有第二名也不可能有第三名。而第零名毫无意义,因为零意味着什么都没有。你怎么可能在异常比赛里面什么都没有呢?这说不通。我们把这些能排序的数字叫做序数(ordinal numbers),因为它们能代表一定的顺序。
然而,程序不会这么想。它们能从一个列表中任意取出一个元素来。对程序而言,动物们的列表更像是一叠卡片。如果它们想要老虎,就直接去拿。如果想要斑马,也能直接去拿。这就需要这些元素能有一个恒定的地址(address),或者索引(index),以便程序能够以一种随机的方式把它们从列表中拿出来。最好的办法就是让指标(indices)从 0 开始。相信我,这样在数学上更为便捷。这种数字叫做基数(cardinal number),它意味着你可以随机取数,所以必须要有一个 0 元素。
ai酱注:这里感觉老肖没太解释清楚,在百度知道上看到一个回答,可以供大家参考:https://zhidao.baidu.com/question/1693009495708807428.html
不知道以上解释能否帮助你理解列表?很简单,每次你对自己说,“我要第 3 个动物,”的时候,把 3 这个序数通过 -1 转换成 2 这个基数就行了。第 3 个动物就是索引为 2 的企鹅。你一生都在使用序数,现在你需要用基数来思考,只用减去 1 就行,没那么难。
记住:序数 == 排序,第一;基数 == 随机卡片,0。 (ordinal == ordered, 1st; cardinal == cards at random, 0.
)
让我们练习一下。用如下动物列表,跟着我列出来的序数或基数要求,写出你从列表中取到的动物。记住,如果我说“第1个”(1st)、“第2个”(2nd),那我就是在用序数,直接减1就可以了。如果我说“第1位”(at 1),那我就是在用基数,直接按这个数字取就行。
animals = ['bear', 'python3.6', 'peacock', 'kangaroo', 'whale', '
(注:为了不造成混淆,以下内容保留英文原文)
- The animal at 1.
- The third (3rd) animal.
- The first (1st) animal.
- The animal at 3.
- The fifth (5th) animal.
- The animal at 2.
- The sixth (6th) animal.
- The animal at 4.
使用完整的表述格式进行回答,例如: “The first (1st) animal is at 0 and is a bear.” 然后反过来说一遍: “The animal at 0 is the 1st animal and is a bear.”
用 python 验证你的答案。
附加练习
- 基于你所学的不同类型数字之间的区别, 你能解释为什么“2010年1月1日”中的2010年真的是2010年而不是2009年?(提示:你不能随机去取年份)
- 多写一些列表,搞明白列表元素的索引,知道你能够准确掌握。
- 用 python 验证你的答案。