原文链接:http://learnpythonthehardway.org/book/ex34.html
列表在编程中是非常有用的,但是除非你能得到列表中的元素否则的话也不是那么有用了。你已经知道怎样按顺序遍历列表中的元素,但是如果你想说,我想得到第五个元素该怎么办呢?这就得徐汇如何去访问一个列表中的元素。下面就是一个怎么访问列表中的第一个元素的例子:
animals = ['bear' ,'tiger' ,'penguin' ,'zebra']
bear = animals[0]
你得到了一个animals的列表,然后用 animals[0]就得到了列表中的第一个元素?!这是怎么实现的啊?因为数学的工作原理,Python计数是从0开始而不是1 。这看起来好像怪怪的,但是这种形式有很多优势,而且实际上设计成 0 或者 1 开头其实都可以。
最好的解释方式是将你平时使用数字的方式和程序员使用数字的方式做对比。
想象一下你正在观看上面提到的四种动物(['bear', 'tiger', 'penguin', 'zebra']) 的赛跑比赛。而它们比赛的名次正好跟列表里的次序一样。这是一场很激动人心的比赛,因为这些动物没打算吃掉对方,而且比赛还真的举办起来了。然而你的朋友来晚了,他想知道最后谁赢了。难道你的朋友会这样问你:“嘿,谁跑了第0名啊?" ,他肯定不会这样说的,而是说:”嘿,谁跑了第1名啊?“。
这是因为动物的次序是很重要的。没有第一个就没有第二个,没有第二个也没有第三个。第零个是不存在的,因为零的意思是什么都没有。“什么都没有”怎么赢比赛嘛,完全不合逻辑。这样的数字我们称之为“序数(ordinal number)”,因为它们表示的是事物的顺序。
而程序员不能用这种方式思考问题,因为他们可以从列表的任何一个位置取出一个元素来。对于程序员来说,上面的列表更像一副扑克牌。如果他们想要tiger ,他们就直接抓取它。如果想要zebra也可以直接抓取。这就需要可以随意的将列表中的元素拖出来,也就是说列表的每一个元素都应该有一个地址,或者一个 “index(索引)”,而最好的方式是使用以 0 开头的索引。相信我说的这一点吧,这种方式获取元素会更容易。这类的数字被称为“基数(cardinal number)”,它意味着你可以任意抓取元素,所以我们需要一个 0 号元素。
怎样可以帮你更好的理解使用列表呢?很简单,只要你每次对自己说,”我想要第三个动物“,你就应该把这里的”序数“通过减一转换成”基数“。第”三"个懂就是列表中索引2位置上的 penguin 元素。由于你一辈子都在跟序数打交道,所以你需要用这种方式来获得基数,只要减 1 就都搞定了。
记住: ordinal == 有序,以 1 开始;cardinal == 随机选取, 以 0 开始。
让我们来训练一下,就用这里的animals列表,下面的练习中我告诉你了列表中的某个序数或者基数值,你需要写下列表中相对应的元素。记住,如果我说“first”,“second”等等,那么我就是使用的序数,你就应该在此基础上减1。如果我给你的是基数(0 ,1 ,2)那么直接使用它就可以了。
animals = ['bear', 'python', 'peacock', 'kangaroo', 'whale', 'platypus']
The animal at 1. #python
The third (3rd) animal. #peacock
The first (1st) animal. #bear
The animal at 3. #kangaroo
The fifth (5th) animal. #whale
The animal at 2. #peacock
The sixth (6th) animal. #platypus
The animal at 4. #whale
对于上面的每个练习,写下像下面这种形式的完整句子:“第1个动物就是列表0位置上的bear。"然后反过来,”在列表0位置上的动物就是第一个动物bear“。
使用Python来检查你的回答是否正确。