Python-元组与列表

这是(Mark学编程)标志,你觉得怎么样?作为微信公众号名称,QQ群名称,以及CSDN头部名称。

今天继续《编程导论》的学习,根据我的经验,现在学习书中的模块和文件部分略早,故跳过,待时机成熟再回来学习不迟。

元组与列表放到一起学习是刻意的。因为他们即相似又有不同。

在学习Python的过程中,有一句话总会提到,那就是:Everything in Python is object. 回顾我们前面学习的各种object(对象),对象是分类型的,如果暂时不包括函数的话,我们就仅仅学了三种类型而已,即整数类型,浮点类型,和字符串类型。顺便说一句,我发现了一篇很好的文章,解释了编程语言中object的问题,做个对赌吧,如果点赞多了(比如100个),我将此文翻译成中文发布出来,供大家参考。还有,如果你有意愿帮助(Mark学编程)成长,我们可以将尚未发布的文章提前发给你,请你帮助编辑改正错别字,排版等。当然还可以有其他回馈。这个联系时再说。

整数类型和浮点类型属于标量类型(从英文scala翻译而来,更深入的解释等以后再说),也就是说其没有内部结构,这个很容易理解。而字符串类型和我们将要学习的元组,列表,字典等,内部都有结构,所以属于非标量类型。其实,对初学者来讲,标量不标量的,知道就行,不知道也不妨碍使用这些类型。我的意思是,不要纠缠这些名称,能正确使用是关键。

列表和元组有一个很大的不同,那就是列表可以变,元组创建后不能变。至于怎么变与不变指什么,会陆续涉及。

元组是元素的有序序列,它和字符串类型很相似,区别在于元组中的元素不只是字符,可以有多种类型的元素;并且和字符串一样,一旦创建完毕,他们内部结构是不变的,而列表和字典内部结构是可变的。另外,你可能学习过其他语言,可能会将元组与其他语言的数组对比。他们有很不大的不同。其中包括:元组可以有不同类型的元素,而其他语言的数组是同类型的,至少C语言是这样的。

要知道,Python的特点可能就在于这几个有结构的类型的强有力的数据形式--元组,列表,字典等。所以,这是Python的重点之一,请认真对待。

我们先看元组的定义、写法。

```

t1 = ()

t2 = (1, 'two', 3)

print (t1)

print(t2)

()

(1)

(1,)

```

请练习以上语句,然后看讨论:

1. 定义一个空元祖,并赋值给t1;

2. 定义一个三元素的元组,并赋值给t2;

3. 打印t1;

4. 打印t2;

5. 请在你的编辑器输入()和(1)试验,是什么?

6. 所以,如果是一个元素的数组,一定要写上逗号。

元组有好多用法,我们这里暂不归纳,待列表等学习完毕后,一并整理,我们只是在必要时引入一些归纳。

元组之间可以用 “+”,“*” ,[ ](这个叫切片)来运算,字符串也是如此, 列表也可以这么运算。举例:

```

t1 = (1, "two", 5)

t2 = ("good", "better")

t1 + t2

t1 * 3

t1[2]

(t1 + t2)[1:3]

```

特别留意切片,语法为:[ start : stop,step ], stop 这个数字不包括在内。比如: 上面的 t1[0:2]只包含下标(索引)为0和1的值;请在编辑器交互测试,其他,不再解释,养成一个多测试的习惯。很快就能掌握。

值得注意的是,元组有个比较奇葩的运算符,就是元组之间可以用 >

必须要掌握用 for 循环遍历元组,或者测试某元素是否在元组内,用 in 或者 not in 很重要。看图:

元组先学这些,学习列表:

列表和元组一样,属于值的有序序列,每个值对应一个下标(没有什么上标下标的,只有索引(index),当初不知道怎么翻译的,总让人感觉有个小字在下面做下标一样,其实列表元素还有其他序列元素都是计算机通过某种机制跟踪的,叫索引最准确。)列表是用[ ], 英文的符号,编程里面都是英文的符号,中文的符号,比如这样的【】电脑是不认识。 注意一点,只包含一个元素的列表,不用像元组那样加上逗号。看下面的例子:

不愧为MIT教授,不经意间提示了我们一把,这个例子说明了以下几点:

1. 首先你要明白 range,前面提到过,这里稍微谈谈:如果用help(range)你会发现里面包括以下说明:

range(stop) -> range object

range(start, stop[, step]) -> range object

解释:里面只加一个参数,那就是从0到stop 减 1 处停止的连续序列,比如 range(5), 返回对象,如果遍历,会打印出,0, 1,2, 3,4, 这几个元素。还真不好一下子解释清楚,就体会这个例子吧。

代码第4行里面有个len()这个可是名副其实的内置函数。返回参数的长度整数数值。

所以,要想打印出全列表的元素值,用上面的代码是合适的。

那么用 for i in l1(是L和1): print i 行不行,试试,一样。

是不是MIT教授推荐的就好呢?我还不知道,如果你知道,请告诉我。

列表是可变的,列表对象创建后可以被修改。可以增加元素,删除元素,插入元素等。现将有关的操作列出来,供测试。

比如,我们有一个211大学的列表

list1 =['PKU', 'QHU','SDU','HNU','FDU']

```

list1.append('MIT') # 添加MIT到列表最右边

list1.pop() # 弹出最右边那个元素

list1.insert(i, 'NY') # 插入NY到 i位置上

好多好多,自行查找并练习。我们今后会在讲解实用代码时,经常使用这些方法。

```

奥,点是个特别的符号,学习类(class)时会讲解,先模仿着用。

列表因为可变,所以,是个很好的机会,来学习列表内(当然还有其他序列内)的元素究竟是什么,有点难度。不要求初学者掌握,能知道怎么有这么回事就行。当然,当你们争的脸红脖子粗的时候,就能搞明白。

明天再见。

  • 发表于:
  • 原文链接:https://kuaibao.qq.com/s/20190123G10UJL00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券