查看原文
其他

走进列表的世界——列表方法(二)

爬虫俱乐部 Stata and Python数据分析 2022-03-15

本文作者:陈志玲

文字编辑:余术玲

技术总编:张   邯


重磅!!!为了大家能够更好地学习Python技术,以及应广大粉丝和往期学员的要求,2019年11月29日-12月1日,武汉字符串数据科技有限公司将在湖北武汉举办《第四期Python编程技术培训》。本次培训采用理论与案例相结合的方式,旨在帮助零基础学员轻松入门Python,由浅入深学习和掌握Python的编程技术,特别是网络数据抓取技术。目前正在火热招生中~

如果有兴趣,具体培训内容详见《2019年Python第四期培训招生》,报名请点击:阅读原文哦~



本文继续介绍列表方法的后半部分:查、排。
3.
index方法
其语法结构为:list.index(x[,start[, end]]),返回列表中第一个值为 x 的元素的索引(注意列表的索引是从零开始)。参数x为查找的对象,start(可选)为查找的起始位置,end(可选)为查找的结束位置。该方法返回查找对象的索引位置,如果没有这样的元素将会抛出 ValueError 异常。
In [1]:list1=[1, 3, 4, 5, 'python', 1]In [2]:list1.index(1)Out[2]: 0
可选参数 start 和 end 是切片符号,用于将搜索限制为列表的特定子序列。返回的索引是相对于整个序列的开始计算的,而不是 start 参数。如果我们想要得到元素中第二个1的索引,可以将搜索限定在(1,6)之间。
In [3]:list1.index(1,1,6)Out[3]: 5
count方法
其语法结构:list.count(x),返回元素 x 在列表中出现的次数。参数x为统计的对象。
统计元素1出现的次数:
In [4]:list1=[1, 3, 4, 5, 'python', 1]In [5]:a=list1.count(1)In [6]:print("元素1出现的次数:",a)Out[6]:元素1出现的次数:2


 

4.

reverse方法

其语法结构:list.reverse(),反转列表中的元素。该方法没有参数,也没有返回值。
将list1倒序输出:
In [7]:list1=[1, 3, 4, 5, 'python', 1]In [8]:list1.reverse()In [9]:list1Out[9]:[1, 'python', 5, 4, 3, 1]
In [10]:for i in list1: ...: print(i) ...:1python5431
reverse方法对列表的修改是永久性的,但是如果我们想得到原始的列表,只需要再次使用reverse方法,如下所示:
In [11]:list1.reverse()In [12]:list1Out[12]:[1, 3, 4, 5, 'python', 1]

 

sort方法
其语法结构:list.sort(key=None,reverse=False),对列表中的元素进行排序。key即为排序方法,可接受自定义的排序方式;reverse为False是不反方向,若要反方向将False改为True,默认为False。
将列表从小到大排列:
In [13]:list3=[2,5,3,1,9,4,3]In [14]:list3.sort()In [15]:list3Out[15]:[1, 2, 3, 3, 4, 5, 9]
我们也可以选择从大到小排列:
In [16]:list3.sort(reverse=True)In [17]:list3Out[17]:[9, 5, 4, 3, 3, 2, 1]

sort方法对数据进行排序时,是按照其在ASCII中所排的位置进行排序的。我们可以对只含有字符串的列表进行排序:

In [18]: list4=["hello","world","python","Apple","boy"]In [19]:list4.sort()In [20]:list4Out[20]:['Apple', 'boy', 'hello', 'python', 'world']

而在使用sort时,列表中也不能出现两种不同的数据类型,如下所示:

In [21]:list1=[1, 3, 4, 5, 'python', 1]In [22]:list1.sort()---------------------------------------------------------------------------TypeError Traceback(most recent call last)<ipython-input-2-73031ee8c861>in <module>----> 1list1.sort() TypeError:'<' not supported between instances of 'str' and 'int'

copy方法

其语法结构:list.copy(),返回列表的一个浅拷贝。该方法没有参数,返回值为复制的列表。如下所示:
In [23]:list1.copy()Out[23]:[1, 3, 4, 5, 'python', 1]
如果我们更改原始列表的元素,那么复制得到的列表会跟着改变吗?我们来做一个实验:
In [24]:list5=list1.copy()In [25]:list1==list5Out[25]:True
In [26]: list1[0]=2
In [27]:list1==list5Out[27]:False
可以看到当我们修改了list1中的第一个元素之后,list1与list5不再相等,然后输出list5:
In [28]:list5Out[28]:[1, 3, 4, 5, 'python', 1]
可以发现list5还是原始的list1,由此可知复制体与本体是互不影响的,同时copy操作是静态复制。但如果我们的列表是一个嵌套列表时,对其进行上述相同操作:
In [29]:list1.insert(0,[1,2]) #加入一个列表作为元素In [30]:list1Out[30]:[[1, 2], 2, 3, 4, 5, 'python', 1]
In [31]:list6=list1.copy()
In [32]:list1[0][1]=0
In [33]:list1==list6Out[33]:True
可以看到,我们虽然对list1进行了修改,但是修改后,list1==list6还是正确的,说明list6也随list1进行了改变。所以我们在使用copy方法对列表进行复制时,要注意嵌套的列表的内容会随着本体的更改而更改,这就是浅copy。
在Python中,分为浅copy和深copy,上述介绍的就是浅copy。那么什么时候会用到深copy呢?如果我们想完全的复制原始列表,无论copy之后对原列表进行任何操作,都不改变复制列表的元素,则需要调用copy模块或其他技巧(感兴趣的读者可自行尝试)。
 
到此为止我们已经介绍了大部分Python中的列表方法,回过头来解决一下最初的问题。在Python中如何将两个列表合并,并按从小到大的顺序排列呢?很显然,我们可以选择extend和sort方法来处理这个问题。例子如下:
In [34]:list1=["hello","world","python","Amy"]
In [35]:list2=["girl","boy","apple"]
In [36]:list1.extend(list2)
In [37]:list1Out[37]:['hello', 'world', 'python', 'Amy', 'girl', 'boy', 'apple']In [38]:list1.sort()
In [39]:list1Out[39]:['Amy', 'apple', 'boy', 'girl', 'hello', 'python', 'world']


对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐  

       走进列表的世界——列表方法(一) 

朝花夕拾|长宽数据转换——reshape命令

Stata有音乐包啦!

对《陈情令》的数据可视化分析

stata绘制热力图详解

实战演练-明星微博热搜次数的数据可视化

《少年的你》影评

集合常用方法小结

实战演练-爬取深交所年报

重建“通天塔” —— Unicode编码与解码

输出分组描述性统计表的利器——report

字典常用操作小结

XPath Helper助XPath爬虫一臂之力

查找变量?用“codebook”!

distinct命令用法一览

Stata数据分析技术应用培训

玩转Python之“手把手”教你爬数据(一)

玩转Python之“手把手”教你爬数据(二)

labelsof和labelbook介绍

Statalist上的“火云邪神”


关于我们

微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。

此外,欢迎大家踊跃投稿,介绍一些关于stata和python的数据处理和分析技巧。
投稿邮箱:statatraining@163.com
投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存