美文网首页程序员
15天Python入门 Day 02:列表之一

15天Python入门 Day 02:列表之一

作者: 明日之丈 | 来源:发表于2018-08-01 15:11 被阅读70次

导读

上一章我们学习了Python中的变量、注释以及简单的数据类型,这一章我们继续深入学习Python的列表。列表是小白在学习过程中最常用的功能,并且由于列表所包含的内容也较多(但并不十分难),我们将分两章来学习Python中的列表。

在这一章,我们会认识列表,对列表进行基本的增删改查操作,学会组织列表并且规避常见的错误。下面请让我们进入正题。

认识列表

说到列表,大家一定不会陌生,生活中我们处处可见列表,像是手机电话簿里的联系人电话,一周日程安排等。我们可以在电话簿(列表)里添加联系人(增),删除联系人(删),改变联系人信息(改),查找联系人(查),也可以对联系人按某种方式进行排序。

在Python中,我们用方括号([])表示列表(list),用逗号(,)来分隔列表里的元素(电话簿里的每一个联系人可以看做是一个元素),下面是一个简单的例子,这个例子中包含若干人名:

student=["Tom","Jack","Lucy","Bob"]

print(student)

运行程序可以得到:

['Tom', 'Jack', 'Lucy', 'Bob']

正如我们所说的那样,在输出里可以看到,名为student的列表是用方括号([])所包裹的元素与元素之间是用逗号(,)分隔的这样一个表列。值得一提的是,同一列表中可以包含不同类型的数据比如["Jack",123,"Adam",567],甚至可以在列表中嵌套列表,随着我们学习的深入,我们对列表的了解也会更加深刻。

访问列表

列表是一个有序集合,要想访问列表里的各个元素,我们只需要知道元素的索引值(下标)即可,访问列表元素的方式如下:

student=["Tom","Jack","Lucy","Bob"]

print(student[0])

print(student[2])

表名[索引值]的方式即可访问对应索引值得元素,细心地朋友们应该发现了,列表索引值并不是从1开始的,而是从0开始,让我们来运行一下程序:

Tom

Lucy

这样我们就能直观的看到,0号索引对应的是列表的第一个元素(Tom),2号索引对应的是列表第三个元素(Lucy),一个长度为10的列表,通常索引值是从0到9,那么我们自然会想,如果输入的索引值不在这个范围会怎么样呢,我们可以试一试:

student=["Tom","Jack","Lucy","Bob"]

print(student[-1])

我们将索引值改为-1,同学们觉得会有错误吗,我们运行一下程序看看:

Bob

是的,出人意料有木有,本以为会有大段的错误提示有木有,然而,在Python中,负向的索引值也是可以的,-1对应的是倒数第一个元素,-2自然是单数第二个元素,以此类推。但是,有朋友就会问了,这是否是一个循环呢,你们尽可以试一试,但我可以告诉你们,在上面的例子中,-5,-6之类的是会有错误的,错误提示"list index out of range",也就是我们说的下标越界,当索引值大于最大索引值(在本例中最索引值是3)时,也同样会提示这个错误。

当然,我们可以结合上一章学习的字符串方法来调戏列表(当然,前提是该元素得是字符串):

student=["Tom","Jack","Lucy","Bob"]

print(student[0].upper())

print(student[1].lower())

print(student[2]+student[3])

print("Hello,My name is "+student[0]+".")

像这样把元素索引后接方法就能产生新的字符串,拼接自然也是可以:

TOM

jack

LucyBob

Hello,My name is Tom.

列表增删改

在导读部分我们已经提到,通过某种方法,我们可以实现对列表元素(还是电话簿里的联系人的例子)的增删改操作,这种方法和字符串的操作方法在某种程度上有着异曲同工,接下来让我们来学习一下如何对列表进行相关操作。

添加列表元素

向列表添加元素的方式有很多,在Python的API当中就提供了许多方法。

1.append()方法

我们用最常见的append()方法在列表尾部添加元素,我们接上面的例子继续往student里面添加更多的学生(元素):

student=["Tom","Jack","Lucy","Bob"]

student.append("Zhangsan")

student.append("Lisi")

print(student)

通过append()方法,我们在原来的student里追加(唔,这个词用得妙啊)了两个学生,打印输出student我们看看有什么变化:

['Tom', 'Jack', 'Lucy', 'Bob', 'Zhangsan', 'Lisi']

[Finished in 0.2s]

好吧,除了时间多了0.1秒之外,我们还可以看到,原来只有四个学生姓名,现在已经增加到了六名,而后面增加的就是用append()方法,用append()方法添加的元素也是按照添加顺序确定的。同样,我们也可以在空列表里添加元素:

student=[]

student.append("Jack")

student.append("Tom")

student.append("Lucy")

print(student)

空列表的创建只需要接一个空方括号就可以了,输出很显然,限于文章篇幅有限,这里就不在赘述。

2.insert()方法

insert,在牛津词典里有两种意思,插入,嵌入和(在文章中)添加,加插,insert sth,咳咳,抱歉串戏了。总之,insert()方法就是在列表的任意位置插入元素。直接看实例:

phone=["IPhone","MI","OPPO","VIVO"]

phone.insert(0,"MEI")

phone.insert(2,"HUAWEI")

print(phone)

(疯狂暗示换手机......)我们创建了一个phone列表,原始列表里有4个元素,通过insert()方法,我们分别在0和2索引位置插入了两个新的元素,让我们看看程序运行结果:

['MEI', 'IPhone', 'HUAWEI', 'MI', 'OPPO', 'VIVO']

[Finished in 0.1s]

可以看到,原来0位置的IPhone被MEI挤掉了,注意,是把原来的往后移,在空出的位置插入添加元素,下面这幅图更加直观:

同理,对于2位置的MI(旧),也是同样,先把MI以后的统统往后移,再在空出的位置插入HUAWEI(新),详细过程就不画了(Win10自带画图功能用的心累)。

删除列表元素

终于到删除元素惹,嗯嗯,联系人里总有那么几个我们恨的牙痒痒的角色,现实中我们因为各种原因只能报之以微笑,现在我们尽可以胆大的做我们想做的事了,那就是删了他们!

1.del语句

在知道元素下标的情况下,我们可以使用del语句对列表元素进行删除,不过这种方式到是很少见,我们这里就一笔带过,还是phone的例子:

phone=["IPhone","MI","OPPO","VIVO"]

del phone[2]

print(phone)

看下结果:

['IPhone', 'MI', 'VIVO']

[Finished in 0.1s]

索引值为2的元素被删除出了列表,删除元素的后面元素会往前挪动。

2.pop()方法

pop()方法在列表元素的删除当中十分常见,值得一提的是,pop()在删除元素后,还会把该删除元素返回(当然你可以不接收)。当pop()不带参数时,默认删除的是最后一个元素,带参数(下标)时可以指定删除某元素,我们接着看上面的例子:

phone=["IPhone","MI","OPPO","VIVO"]

poped1=phone.pop()

print(phone)

poped2=phone.pop(1)

print(phone)

print("You poped "+poped1+" and "+poped2+".")

用popedx来接收已删除的元素,并且打印出来,运行程序可以得到:

['IPhone', 'MI', 'OPPO']

['IPhone', 'OPPO']

You poped VIVO and MI.

[Finished in 0.1s]

当pop()不带参数时,删除了最后一个元素(VIVO),当给定参数为1时,删除了下标为1的元素(MI),由此可见pop()方法可以删除任意位置的元素,这在Python中占据了极大方便,也是在Python中常用的方法。

pop()方法与del语句的主要区别就在于是否需要接收返回值,我们可以根据需要使用这两种方式来删除列表元素。

3.remove()方法

remove在中文中的意思就是移除,和pop()方法的不同之处在于,remove()方法并不需要知道要删除元素的下标(索引值),而只需要知道其,我们对刚刚的例子加以修改:

phone=["IPhone","MI","OPPO","VIVO"]

removed1=phone.remove("OPPO")

print(phone)

print(removed1)

我们在remove()方法中指定删除"OPPO",并把它放到removed1当中去,让我们运行一下程序:

['IPhone', 'MI', 'VIVO']

None

[Finished in 0.1s]

可以看到phone列表当中已经删除了"OPPO"元素,而打印输出removed1的值居然是None(空),也就是说,remove()方法并不会返回删除元素

注意:

我们并没有规定列表当中不能出现重复元素,这是因为每一个列表元素都是有序的(即有唯一与之对应的索引值),这就意味着当我们用remove()方法来删除列表元素时,如果遇到元素值有重复的现象,Python会默认删除第一个遇到的元素,当然,通过循环语句我们可以实现同值的全部删除,循环语句在后面的课程中会学习到,这里就不在赘述。

修改列表元素

修改列表元素,听起来很高大上,其实不过就是用等号(=)赋新值给列表罢了。我们就简单讲讲如何修改列表元素。

我们继续看到phone列表,对它做如下操作:

phone=["IPhone","MI","OPPO","VIVO"]

phone[1]="HUAWEI"

print(phone)

我们把下标为1的元素值(MI)修改为"HUAWEI"(不要问华为给了我多少钱,事实上,他一分没给),输出修改后的phone列表,可以看到:

['IPhone', 'HUAWEI', 'OPPO', 'VIVO']

[Finished in 0.1s]

原来的"MI"已经被"HUAWEI"所替代了,这就是如何修改列表元素,很简单的。

组织列表

在这一小节当中,我们会通过sort()方法永久性的对列表元素进行排序,用sorted()函数对列表元素进行临时性排序,并且能花式输出列表,计算列表长度等,这些操作为以后编程打下基础。

1.sort()

sort()方法能对列表元素按照字母表顺序进行永久性排序,我们以姓名为例:

student=["Jack","Tom","Bob","Lucy","Jiangnan","Liucixin"]

student.sort()

print(student)

注意到,学生姓名当中有同样字母开头的姓名,我们运行程序看看结果:

['Bob', 'Jack', 'Jiangnan', 'Liucixin', 'Lucy', 'Tom']

[Finished in 0.1s]

除了顺位按照字母表顺序排序以外,对于同样字母开头的名字,会对比第二个字母,若是仍然相同,则以此类推对比下一个

我们也可以给sort()加上参数sort(reverse=True),也就是按字母表从后往前的顺序输出,同学们可以自行测试,鉴于篇幅有限,这里不再赘述。

2.sorted()

sorted()函数对列表进行临时性的排序,排序方式也是按照字母表顺序,我们沿用上一个例子,并对两种排序进行对比:

student=["Jack","Tom","Bob","Lucy","Jiangnan","Liucixin"]

student2=sorted(student)

print(student)

print(student2)

首先注意到变化,sorted()方法时使用与sort()不同,我们用变量student2来承接sorted(),即进行临时排序的列表,注意,sorted()方法是将列表名作为参数放在括号里,而sort()方法则是直接被列表名引用,我们再来看看输出结果:

['Jack', 'Tom', 'Bob', 'Lucy', 'Jiangnan', 'Liucixin']

['Bob', 'Jack', 'Jiangnan', 'Liucixin', 'Lucy', 'Tom']

[Finished in 0.1s]

可以看到,尽管我们对student进行了排序,但是由于是临时性的,所以,当我们再次输出student时,列表顺序并未发生变化,而在作为记录、接收的变量student2中,则保留了列表的排序,即一个新的列表。

注意:

我们仍然可以对sorted()加上参数reverse=True,效果和sort()一样,如下:

student=["Jack","Tom","Bob","Lucy","Jiangnan","Liucixin"]

student2=sorted(student,reverse=True)

print(student2)

值得一提的是,参数与参数之间要用逗号(,)隔开,运行程序得到结果:

['Tom', 'Lucy', 'Liucixin', 'Jiangnan', 'Jack', 'Bob']

[Finished in 0.1s]

3.reverse()倒序输出

其实倒序这个说法并不十分准确,reverse,在这里译为“反转”更为恰当,也就是对列表进行反转输出,我们用fruit来举例:

fruit=["apple","banana","pear","watermelon"]

print(fruit)

fruit.reverse()

print(fruit)

在fruit列表里添加若干元素,然后用reverse()方法对fruit进行反转,再次输出fruit:

['apple', 'banana', 'pear', 'watermelon']

['watermelon', 'pear', 'banana', 'apple']

[Finished in 0.1s]

我们看到fruit的确被反转了,并且相当于产生了一个新的列表。reverse()对列表的反转是永久性的,但我们随时可以用reverse()方法再次对列表进行反转,这就相当于还原列表。

4.获取列表长度len()

len是英文length长度的意思,通过len()方法我们就可以确定一个列表的长度了,通常我们获取列表长度是为了能在循环里对列表进行更精确地操作,具体内容会在后面的章节里学习到,我们先来测试一下len()方法:

fruit=["apple","banana","pear","watermelon"]

length=len(fruit)

print(length)

喏,len()的用法非常之简单,只要把表名当做参数传递到len()当中去,len()就会返回它的长度,我们用length来接收它的长度并且打印出来:

4

[Finished in 0.1s]

显而易见,fruit的长度就为4。

小结

这就是本章我们所学的内容了,通过本章的学习,我们认识到列表是由方括号([])所包裹的,内里元素用逗号(,)分隔的一组有序集合。引用列表元素会用到它们的索引值,并且索引值是从0开始的(好吧,-1之类的也是可以的啦),不能超过最大值,否则会产生下标越界的错误。接下来我们学习了对列表元素的增删改和对列表的花式排序输出以及确定列表长度。

在下一章的内容里,我们会学习如何遍历列表,遍历的意思就相当于。。。嗯,查看?查找?遍历在《辞海》和《新华字典》里的意思是“普遍游历”(WTF?),好吧,要想知道遍历是什么意思,请继续收看下期的《走进科学》栏目,呸,《走进Python》!

更多更新Python教程请关注微信公众号:编程文科僧(gh_ae4e8695e1fb)

相关文章

网友评论

    本文标题:15天Python入门 Day 02:列表之一

    本文链接:https://www.haomeiwen.com/subject/jhhrvftx.html