学习
实践
活动
专区
工具
TVP
写文章

Python基础知识系列——列表和元组

写在前面

刚刚过完愚人节,笔者给各位大大送上一句迟来的节日祝福了(虽然这一天你可能被很多人坑过,愚弄过,但who care?毕竟坑坑更健康嘛)。过去的几期文章中,笔者对机器学习中的KNN算法进行了简单介绍,但是有部分读者反映对于Python的基础语法缺乏认识,所以对于文章中的很多内容无法深入理解,虽然笔者在开稿之前已经强调过,本公众号主要针对于已有python基础的读者,但是笔者最终还是无法摆脱部分读者的强烈要求(你说你们留言就可以了呀,干嘛一定要加小编微信诉苦呢),所以决定开展几期python基础知识的学习。不过小编并不准备系统性地去讲解python的相关知识,毕竟咱不能抢书商们的生意呀,笔者大概会用7-9篇文章(笔者暂时规划好了七篇文章,有两篇尚在斟酌中,后期写作中会最终确定文章篇数)较为轮廓性地讲一下python之中最为关键的一些话题。当然笔者也希望各位朋友能够在手边随时准备一本python基础方面的书籍(python学习手册,python基础教程都算是不错的python入门书籍,笔者在这里就不再过多推荐了,以免有插播广告之嫌,最重要的是没有广告费呀),这样便可以在学习的过程中有一个系统性的学习与参考。今天笔者主要是要和大家聊一下python数据结构之中的列表与元组,下面进入正题!

不好意思,晃点你们的时候又到了,请先允许笔者在这里介绍本文的写作框架。本文将先介绍列表、元组等对象的祖宗序列,介绍一些序列对象的共有方法;接下来介绍列表之中的特有方法;最后简单介绍一下列表的孪生兄弟元组的相关知识,本文的侧重点会落在列表的讲解中,这种数据结构也是python学习中最为常用的一种数据结构。让我们进入python的世界吧!

Ⅰ、序列——始祖级别的python数据结构

python之中无疑存在许多数据结构,但是其中最基础最重要的一种数据结构绝对归属于序列,你问我为什麼,因为人家有三个好儿子:列表、元组、字符串。这三种数据结构绝对构成了Python的半壁江山,所以你现在知道序列为什麼厉害了吧,别人是拼爹,咱是拼儿子,咱不牛谁牛。所以这也是笔者先讲解序列的原因,因为序列的很多操作方法是可以直接用在列表、元组和字符串之中的,下面就介绍一些这些序列共有方法。

1.1 索引(index)

何为索引,索引就是一种位置引用,不同于其他编程语言的地方是,Python中索引的位置开始于0而不是1,这对于很多有编程经验的同学来说无疑有点难以适应,但是适应过后你就会深深爱上这种索引方式。举个栗子:

笔者首先定义了一个字符串对象Greeting,然后只需要用[]将你需要的位置括起来放到对象后面,便会得到相应位置上的值,这就是索引。当然除了这种正向索引之外,你也可以从后向前进行索引,只需要简单的在数字前面加上一个-号便可以便是倒数第几,有没有很简单。下面给出一个索引的程序例子(这里要再次说明一点,为了能够让初学者习惯去敲写代码以及为了使代码更加具有观看性,以后笔者会在Jupyter Notebook中书写完代码之后直接截图过来,不好意思,这里笔者不接受板砖):

1.2 切片(Slice)

所谓切片,就是一种区间选择,它是索引的升级版,因为索引更多是对单个元素的选择,而切片便是对多个要素的同时选择,这里还是以Greeting这个字符串为例来进行说明,假设你想选择这个字符串中的Hello,那么你可以通过Greeting[0:5]进行选择,如果你想选择World,那么你可以通过Greeting[6:11]进行选择,当然你也可以通过Greeting[-5:]进行选择。如果你想选则“H”之后的所有元素,你的确可以采用Greeting[0:11]进行选择,但是存在一种更加简便的方式Greeting[0:]。这里就大致说出了切片选择的原理,切片选择中需要注意的两点就是:其一,切片选择顾首不顾尾,即切片选择中第一个索引会被包含在选择之内,而最后一个索引不会被包含在选择之内,有点类似于中学学习的半开区间[a,b);其二,切片选择中索引大小一定不能超过序列界限,否则就很容易报错。

当然切片还有一种更加高级的索引方式,便是通过自己指定步长从而去实现个性化选择,假如你要选择Greeting中处于偶数位的元素,那么你可以通过Greeting[0::2]进行选择,所以选择的方式完全在于你的创造力。请看例子:

1.3 序列的加法和乘法

这里一定要强调一下,虽然这里用了加法和乘法,但是各位朋友可不要真的把它完全当成加法了,这里的加法和乘法都具有多态性(关于多态性这里不过多阐述,需要了解的朋友可以参考Python学习手册),当加法和乘法操作的对象是数值时,那么它就是大家熟知的加法运算和乘法运算;但是当加法和乘法操作的对象是字符串时,那么加法就相当于连接,而乘法就相当于重复。例如2+3 = 5,‘2’+‘3’=‘23’。当然如果是操作序列对象时,加法一般用来指代连接,而乘法更多用来重复,例如存在两个列表a=[1,2,3]和b=[2,3,4],那么a+b=[1,2,3,2,3,4],可以看出这里仅仅是把b连接到了a的后面,同样如果采用乘法的话,便可以得到:a*2=[1,2,3,1,2,3]。示例如下:

1.4 成员资格检查(in)

所谓成员资格检查就是要确定某一个元素是不是序列之中的元素,检查的结果会返回布尔值(布尔值就是简单的0,1,也就是False和True)。例如存在一个字符串String = 'abcdefg',如果想确定c是否存在于字符串中,可以使用‘c’in String,那么就会得到True,这就是in函数的用法。这里强调一点(尤其是对于使用Pyhton2的朋友),in函数不仅能够判断单个字符,而且可以判断某个字符串是否是一个字符串的一部分,还以上面的字符串为例,可以用'abc' in String来判断字符串‘abc’是否存在于字符串String中。下面例子显示了一个序列判断的例子:

1.5 序列中常用函数

使用序列时,经常被用的三个函数分别是min,max和len,这三个函数分别用来确定一个序列的最小值、最大值和序列的长度,通过命令min(String),max(String)和len(String)可以得到字符串String的最小值、最大值以及长度分别为a,g,7。当然关于这几个函数也有一些其它的参数选项,这里不再详聊,各位可以参看相关教材。

Ⅱ、列表——Python主力

上文对序列这一大Boss进行了讲解,下面笔者正式展开对于各个序列对象的介绍。首先,笔者要先和大家分享一下序列的嫡长子,也就是Python中的主力对象——列表。

2.1 基本列表操作

既然要使用列表,那么最基本的入门便是你要会创建一个列表(这正所谓巧妇难为无米之炊)。在Python中创建列表是一件so easy的事情,仅仅只需使用list()函数便可以了。例如使用list('hello')便可以生成列表['h','e','l','l','o'],是不是简单之至。在会创建列表之后,接下来你要学会一些基本的列表操作,具体包括:

A. 修改列表(别名:为列表赋值)

X = [1,2,3,4,5]

X[1] = 4

X = [1,4,3,4,5]

可以看出,你需要修改那个元素,仅仅需要将此元素重新赋值即可,并且这种赋值会直接修改列表。

B. 删除列表元素

Names = ['apple','banana','pear']

del Names[1]

Names = ['apple','pear']

通过使用del语句便可以成功删除列表中的元素banana.

C. 给切片赋值

lst = list['Pelr']

lst[2:] = 'ar'

lst = ['P','e','a','r']

对于列表中切片的赋值和对单个元素赋值的方式相同,当然这种切片赋值的方式不一定需要被选列表长度与替换值的长度相同,例如names = list('pear'),通过names[1:] = list('ython'),则可以得到names = ['p','y','t','h','o','n']。

2.2 常用列表方法

方法是与对象紧密联系的函数。方法的调用一般采用:

objects.method(arguments)

这便是使用对象方法的典型方式,下面就主要讲解一下列表最常用的一些方法。

A. append方法

lst = [1,2,3]

lst.append(4)

lst = [1,2,3,4]

B. clear方法

lst = [1,2,3]

lst.clear()

lst = []

C. copy方法

lst = [1,2,3,4]

lst1 = lst.copy()

lst1 = [1,2,3,4]

D. count方法

lst = ['to','be','or','not','to','be']

number = lst.count('be')

number = 2

E. extend方法

lst1 = [1,2,3]

lst2 = [4,5,6]

lst = lst1.extend(lst2)

lst = [1,2,3,4,5,6]

F. index方法

lst = ['We', 'are', 'the', 'knights']

Index = lst.index('are')

Index =2

G. insert方法

lst = [1,2,3,4,5,6]

lst.insert(1,10)

lst = [1,10,2,3,4,5,6]

H. pop方法

lst = [1,2,3,4,5,6]

lst.pop()

lst = [1,2,3,4,5]

I. remove方法

lst = [1,2,3,4,5,6]

lst.remove(2)

lst = [1,3,4,5,6]

J. reverse方法

lst = [1,2,3,4,5,6]

lst.reverse()

lst = [6,5,4,3,2,1]

K. sort方法

lst = [1,4,6,7,3,5]

lst.sort()

lst = [1,3,4,5,6,7]

这便是列表之中的常用方法,鉴于各个例子已经很好地说明了方法的用法,因此不再详细解释这些方法。下面让我们拜访一下列表的孪生兄弟——元组。

Ⅲ、元组——列表的孪生兄弟

与列表一样,元组也是序列,唯一的差别在于元组是不能修改的。元组语法很简单,只要将一些值用逗号分隔,就能自动创建一个元组。例如你输入1,2,3,那么在python看来你便是输入了一个元组,它会相应输出(1,2,3)。有一点必须明确,元组的真正标志是“,”号,而不是括号,这一点一定要多加注意,所以如果你要创建一个单元素的元组,那么你保证输入的结尾以逗号结束。

作为列表的孪生兄弟,元组的很多操作与列表类似,当然除了列表之中用于修改的方法之外,其他方法列表和元组是通用的。因此,笔者在这里便不再赘述。

那么,不禁要问,既然元组只是阉割的列表,那么为什麼还需要掌握元组呢,这主要归于两点:

1、它们可以用作字典中的键(以及集合的成员),而列表不行。字典将在后文中讲解。

2、有些内置函数和方法返回元组,这意味着必须跟它们打交道。

后记

讲到这里,本文算告一段落了,本期文章中,笔者和大家讲解了一下Python之中最重要的两种序列:列表和元组。通过对它们的讲解,大致了解了序列以及列表之中常用方法和函数,因此笔者准备再接再厉,在下一期文章中,笔者准备接着讲述Python中另外一种序列对象,字符串,这一你将经常打交道的数据结构。下期文章笔者将和大家详聊一番这一数据结构,敬请期待!

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180404G1YR6900?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

关注

腾讯云开发者公众号
10元无门槛代金券
洞察腾讯核心技术
剖析业界实践案例
腾讯云开发者公众号二维码

扫码关注腾讯云开发者

领取腾讯云代金券