走进列表的世界——列表方法(一)
本文作者:陈志玲
文字编辑:宁刘莹
技术总编:张 邯
重磅!!!为了大家能够更好地学习Python技术,以及应广大粉丝和往期学员的要求,2019年11月29日-12月1日,武汉字符串数据科技有限公司将在湖北武汉举办《第四期Python编程技术培训》。本次培训采用理论与案例相结合的方式,旨在帮助零基础学员轻松入门Python,由浅入深学习和掌握Python的编程技术,特别是网络数据抓取技术。目前正在火热招生中~
如果有兴趣,具体培训内容详见《2019年Python第四期培训招生》,报名请点击:阅读原文哦~
在《数据类型介绍——tuple、list和range对象》一文中,介绍了列表的定义和简单的操作。列表是最常用的Python数据类型,也是Python中最基本的数据结构。所以,有关列表数据的处理方法是我们经常会用到的。例如,笔者在初学Python时遇到这样一个问题:在Python中如何将两个列表合并,并按从小到大的顺序排列呢?本文将带着这样一个问题,进入列表的世界一探究竟。
其实,列表的十几种方法可以总结为四种操作,即增、减、查、排,本文将介绍前两部分内容,下一期将介绍后两部分。接下来,我们来一一揭开它们的面纱~
1. 增
Ø append方法
其语法结构为:list.append(x),其用途为在列表的末尾添加一个元素。例如:将数字1至10添加到列表中:
In [1]: list1=[]
In [2]: for i in range (1,6):
...: list1.append(i)
...: list1
Out[2]: [1, 2, 3, 4, 5]
其中的x可以是任何类型的对象,这意味着使用append方法不仅可以将单一的数据类型,比如字符串、整型、浮点型追加进去,还可以将一个数组、元组或是一个列表追加到原始列表对象中。
将字符串“python”添加到list1中:
In [3]: list1.append('python')
In [4]: list1
Out[4]: [1, 2, 3, 4, 5, 'python']
也可以将一个列表添加到list1中:
In [5]: list2=[1,2]
In [6]: list1.append(list2)
In [7]: list1
Out[7]: [1, 2, 3, 4, 5, 'python', [1, 2]]
如上所示,我们得到一个嵌套列表。如果,我们想将list2中的元素添加到list1中,该怎么做呢?我们往下看……
Ø extend方法
其语法结构:list.extend(x),其用途也是在列表中添加元素,但extend的参数与append的区别就是,extend的参数x必须是可迭代对象。可迭代对象通俗的理解就是可以被for…in…遍历循环的对象,例如列表、字典、元组、集合、字符串等,不可迭代对象有整数型。
将list2中的元素拼接到list1中:
In [8]: list1.extend(list2)
In [9]: list1
Out[9]: [1, 2, 3, 4, 5, 'python', [1, 2], 1, 2]
可以发现,extend解决了上一个问题。不同于将list2作为列表[1, 2]加到list1中,这次是在list1尾部,依次加入了1和2。同时也说明列表是可迭代对象,可以使用extend方法将其元素逐个拼接到另一个列表中。
如果我们拼接一个不可迭代对象会怎么样?
In [10]: list1.extend(100)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-7-bca38b103f90> in <module>
----> 1 list1.extend(100)
TypeError: 'int' object is not iterable
可以看到程序报错,并指出是因为int对象不可迭代,所以在使用extend方法拼接时需要注意这一点,同时也要注意区分append和extend的用法。
Ø insert方法
其语法为:list.insert(i, x),在给定的位置插入一个元素。第一个参数i是要插入的元素的索引,第二个参数x是要插入列表的对象。所以 list1.insert(0, 0) 是将0插入列表头部。
In [11]: list1.insert(0, 0)
In [12]: list1
Out[12]: [0, 1, 2, 3, 4, 5, 'python', [1, 2], 1, 2]
我们还可以从后往前插入元素:
In [13]: list1.insert(-1,3)
In [14]: list1
Out[14]: [0, 1, 2, 3, 4, 5, 'python', [1, 2], 1, 3, 2]
每当我们执行insert()操作时,都是将插入位置的元素向后移动再在相应的位置插入元素。
2.减
Ø remove方法
其语法结构为;list.remove(x),移除列表中第一个值为 x 的元素。如果没有这样的元素,则抛出 ValueError 异常,这里是需要在应用中注意的。
将[1,2]从列表list1中移除:
In [15]: list1.remove([1,2])
In [16]: list1
Out[16]: [0, 1, 2, 3, 4, 5, 'python', 1, 3, 2]
如果我们继续移除[1,2]:
In [17]: list1.remove([1,2])
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-18-a95a6e4e3519> in <module>
----> 1 list1.remove([1,2])
ValueError: list.remove(x): x not in list
结果报错,正如我们所说,移除对象x不存在。
如果我们移除元素2:
In [18]: list1.remove(2)
In [19]: list1
Out[19]: [0, 1, 3, 4, 5, 'python', 1, 3, 2]
结果移除了列表中第一个元素2,后面的依然还在。如果我们想要一次性全部移除元素2,则需要使用循环判断,即:
In [20]: list1=[0, 1, 2, 3, 4, 5, 'python', 1, 3, 2]
In [21]: while 2 in list1:
...: list1.remove(2)
...: list1
Out[21]: [0, 1, 3, 4, 5, 'python', 1, 3]
Ø pop方法
其语法结构:list.pop([i]),删除列表中给定位置的元素并返回它。如果没有给定位置,a.pop() 将会删除并返回列表中的最后一个元素。
删除第一个元素:
In [22]: list1_0=list1.pop(0)
In [23]: print ("删除的项为 :", list1_0)
删除的项为 : 0
若不给定位置参数:
In [24]: list1_pop=list1.pop()
In [25]: print ("删除的项为 :", list1_pop)
删除的项为 : 3
可以看到,如果不给定位置参数将删除最后一个元素,即默认的索引值为-1,并返回最后一个元素。最后我们得到列表:
In [26]: list1
Out[26]: [1, 3, 4, 5, 'python', 1]
如果索引值超出范围,则程序会报出相应的错误,即:
In [27]: list1.pop(7)
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-10-661c35febcc2> in <module>
----> 1 list1.pop(7)
IndexError: pop index out of range
Ø clear方法
其语法结构:list.clear(),删除列表中所有的元素。很明显clear方法比上述的remove和pop方法都要干脆果断,它会直接删除所有元素。该方法没有参数,也没有返回值。
In [28]: list1.clear()
In [29]: list1
Out[29]: []
最后我们得到一个空列表list1。我们还可以使用del语句来清空整个列表,即
In [30]: list1=[1, 3, 4, 5, 'python', 1]
In [31]: del list1[:]
In [32]: list1
Out[32]: []
可以发现del语句是删除指定范围,例如:
In [33]: list1=[1, 3, 4, 5, 'python', 1]
In [34]: del list1[:2]
In [35]: list1
Out[35]: [4, 5, 'python', 1]
最后,我们来总结一下:remove按值删除,并且删除的是首个符合条件的元素,返回值为空;pop 按索引位置删除元素,无参情况下删除最后一个元素,返回值为删除的元素值;clear则是清空整个列表。
关于我们
微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。