练习 34 获取列表元素

列表(list)真的非常有用,前提是你要能获取到它们里面的内容。你已经能够按顺序遍历列表中的元素,但是如果你要取其中的第5个元素,你该怎么操操做?你需要知道如何获取一个列表里面的元素。下面是如何获取列表中第一个元素的方法:

  1. animals = ['bear', 'tiger', 'penguin', 'zebra']
  2. 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', '

(注:为了不造成混淆,以下内容保留英文原文)

  1. The animal at 1.
  2. The third (3rd) animal.
  3. The first (1st) animal.
  4. The animal at 3.
  5. The fifth (5th) animal.
  6. The animal at 2.
  7. The sixth (6th) animal.
  8. 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 验证你的答案。