Python操作列表的常用方法分享


Posted in Python onFebruary 13, 2014

下面列出列表常用的方法操作列表以及小例子:

1.  Append
     在列表末尾添加元素,需在列表末尾添加元素,需要注意几个点:
     A. append中添加的参数是作为一个整体

 >>> name = list("scott")
 >>> name
 ['s', 'c', 'o', 't', 't']
 >>> name.append(list(" tiger"))
 >>> name
 ['s', 'c', 'o', 't', 't', [' ', 't', 'i', 'g', 'e', 'r']]

得到的值不是:['s', 'c', 'o', 't', 't', ' ', 't', 'i', 'g', 'e', 'r']
如果想要这种的追加方式,可以试试分片赋值(或者下面说到的extend方法):

 >>> name = list("scott")
 >>> name
 ['s', 'c', 'o', 't', 't']
 >>> name[len(name):] = list(" tiger")      #从末尾追加
 >>> name
 ['s', 'c', 'o', 't', 't', ' ', 't', 'i', 'g', 'e', 'r']

B.append一次性只能添加一个元素

>>> name = list("scott")
>>> name
['s', 'c', 'o', 't', 't']
>>> name.append("A","B")        #添加多个元素即将报错
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
TypeError: append() takes exactly one argument (2 given)
>>> name.append("A")
>>> name
['s', 'c', 'o', 't', 't', 'A']

2. Count

统计某个元素在列表中出现的次数

>>> name = list("scott")
>>> name
['s', 'c', 'o', 't', 't']
>>> name.count('s')
1
>>> name.count("t")
2
>>> name.count("A")
0
>>> name.append(list("Python"))
>>> name
['s', 'c', 'o', 't', 't', ['P', 'y', 't', 'h', 'o', 'n']]
>>> name.count(['P', 'y', 't', 'h', 'o', 'n'])
1

3. Extend

   在原列表追加另一个序列的中的多个值

 >>> name = list("scott")
 >>> name
 ['s', 'c', 'o', 't', 't']
 >>> name.extend(list(" tiger"))
 >>> name
 ['s', 'c', 'o', 't', 't', ' ', 't', 'i', 'g', 'e', 'r']

当然,我们可以用分片赋值来实现:

 >>> name = list("scott")
 >>> name
 ['s', 'c', 'o', 't', 't']
 >>> name[len(name):] = list(" tiger")
 >>> name
 ['s', 'c', 'o', 't', 't', ' ', 't', 'i', 'g', 'e', 'r']

这时小伙伴们会想到,我们可以直接用操作符"+"嘛,还方便些:

 >>> name = list("scott")
 >>> pwd  = list(" tiger")
 >>> name + pwd
 ['s', 'c', 'o', 't', 't', ' ', 't', 'i', 'g', 'e', 'r']
 >>> name
 ['s', 'c', 'o', 't', 't']

从这三种方式操作的输出,可以看出:
extend和分片赋值都是修改原列表,相对而言,extend可读性强些,而操作符"+"是生成一个新的列表,不影响原列表,如果
我们需要生成新列表而不影响原列表,就可以用操作符"+"。

4.Index
从列表中找出某个值第一个(注意是第一个)匹配项的索引位置

>>> name = list("scott")
>>> name
['s', 'c', 'o', 't', 't']
>>> name.index('t')    ##第一个字母t的索引位置是3
3   
>>> name.index('a')
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
ValueError: list.index(x): x not in list
>>> 'a' in name
False
>>> 'a' not in name
True

从输出可以看出,index找的是第一个匹配项的索引位置,而如果查找的元素不在列表中,会报错(返回-1会不会好一点呢?),当然如果想避免报
错,我们可以先用in操作,判断某个元素是否在某个列表中,如果在的话,然后进行index操作。

5. Insert
    用于将对象插入到列表中,俩个参数,第一个是索引位置,第二个插入的元素对象。

 >>> name = list("scott")
 >>> name
 ['s', 'c', 'o', 't', 't']
 >>> name.insert(2,'tiger')     ##在索引为2的地方插入字符串tiger  
 >>> name
 ['s', 'c', 'tiger', 'o', 't', 't']

我们也可以用分片赋值:

 >>> name = list("scott")
 >>> name
 ['s', 'c', 'o', 't', 't']
 >>> name[2:2] = ['tiger']
 >>> name
 ['s', 'c', 'tiger', 'o', 't', 't']
 >>> name[2:2] = 'tiger'
 >>> name
 ['s', 'c', 't', 'i', 'g', 'e', 'r', 'tiger', 'o', 't', 't']

这里需要注意的是,如果是插入一个元素,需要用[]括起来,不然,直接用字符串的话,是插入字符串的列表,在索引位置之后添加。
当然,用insert的可读性比分片赋值强。

6. Pop
    移除列表中的一个元素(最后一个元素),并返回该元素的值

>>> name = list("scott")
>>> name
['s', 'c', 'o', 't', 't']
>>> name.pop()
't'
>>> name
['s', 'c', 'o', 't']
>>> name.append("t")
>>> name
['s', 'c', 'o', 't', 't']

分片赋值模拟pop:
 >>> name = list("scott")
 >>> name
 ['s', 'c', 'o', 't', 't']
 >>> name[len(name)-1:] = []
 >>> name
 ['s', 'c', 'o', 't']

这上面用pop和append模拟了栈的先进先出LIFO。

7. Remove
   移除列表中某个值的第一匹配项: 如果有俩个相等的元素,就只是移除匹配的一个元素,如果某元素不存在某列表中,便会报错,而且一次性只能
   移除一个元素。

>>> name = list("scott")
>>> name
['s', 'c', 'o', 't', 't']
>>> name.remove("t")    #去掉第一个t
>>> name
['s', 'c', 'o', 't']
>>> name.remove("A")    #不存在会报错
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
ValueError: list.remove(x): x not in list
>>> "A" not in name
True
>>> name.remove("s","c")  #一次只能移除一个元素
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
TypeError: remove() takes exactly one argument (2 given)

8.Revense

   将列表中的元素反向

 >>> name = list("scott")
 >>> name
 ['s', 'c', 'o', 't', 't']
 >>> name.reverse()
 >>> name
 ['t', 't', 'o', 'c', 's']

9. Sort & Sorted

    sort方法用于对列表进行排序,修改原列表,不会返回一个已排序的列表副本

 >>> result = [8,5,5,3,9]
 >>> result.sort()
 >>> result
 [3, 5, 5, 8, 9]

如果我们想要返回一个已排序的列表副本,而不影响原来的列表呢,一种方法,我们可以先赋值原来列表(可以用分片赋值复制),然后
在复制的列表上做sort操作,另一种方法,就是使用sorted函数,它会返回已排序的列表副本:

 >>> result = [8,5,5,3,9]
 >>> result2 = sorted(result)
 >>> result
 [8, 5, 5, 3, 9]
 >>> result2
 [3, 5, 5, 8, 9]

关于自定义的比较方法,像javascript做sort可以传入compare函数,java可以传入Comparable<T>实例,Python也类似,留待后续了~(@^_^@)~。
Python 相关文章推荐
使用Python对IP进行转换的一些操作技巧小结
Nov 09 Python
Python单例模式实例详解
Mar 01 Python
利用Anaconda完美解决Python 2与python 3的共存问题
May 25 Python
python搭建服务器实现两个Android客户端间收发消息
Apr 12 Python
使用Python实现在Windows下安装Django
Oct 17 Python
Python获取Redis所有Key以及内容的方法
Feb 19 Python
20行python代码的入门级小游戏的详解
May 05 Python
在pyqt5中QLineEdit里面的内容回车发送的实例
Jun 21 Python
Python 元组拆包示例(Tuple Unpacking)
Dec 24 Python
python3 实现口罩抽签的功能
Mar 11 Python
Python导入父文件夹中模块并读取当前文件夹内的资源
Nov 19 Python
为2021年的第一场雪锦上添花:用matplotlib绘制雪花和雪景
Jan 05 Python
python基础教程之lambda表达式使用方法
Feb 12 #Python
Python的print用法示例
Feb 11 #Python
python中的yield使用方法
Feb 11 #Python
python重试装饰器示例
Feb 11 #Python
python网络爬虫采集联想词示例
Feb 11 #Python
python基础教程之实现石头剪刀布游戏示例
Feb 11 #Python
python使用递归解决全排列数字示例
Feb 11 #Python
You might like
在项目中寻找代码的坏命名
2012/07/14 PHP
ThinkPHP打开验证码页面显示乱码的解决方法
2014/12/18 PHP
Symfony2学习笔记之模板用法详解
2016/03/17 PHP
Thinkphp5框架异常处理操作实例分析
2020/06/03 PHP
extjs实现选择多表自定义查询功能 前台部分(ext源码)
2011/12/20 Javascript
简单的JavaScript互斥锁分享
2014/02/02 Javascript
如何书写高质量jQuery代码(使用jquery性能问题)
2014/06/30 Javascript
jQuery使用empty()方法删除元素及其所有子元素的方法
2015/03/26 Javascript
编写高质量JavaScript代码的基本要点
2016/03/02 Javascript
JS中用try catch对代码运行的性能影响分析
2016/12/26 Javascript
实例讲解DataTables固定表格宽度(设置横向滚动条)
2017/07/11 Javascript
关于vue-resource报错450的解决方案
2017/07/24 Javascript
jQuery实现输入框的放大和缩小功能示例
2018/07/21 jQuery
JS添加或删除HTML dom元素的方法实例分析
2019/03/05 Javascript
微信小程序mpvue点击按钮获取button值的方法
2019/05/29 Javascript
原生js实现抽奖小游戏
2019/06/27 Javascript
layui实现数据表格点击搜索功能
2020/03/26 Javascript
使用layer模态框给新页面传值的方法
2019/09/27 Javascript
vue实现购物车列表
2020/06/30 Javascript
JavaScript实现沿五角星形线摆动的小圆实例详解
2020/07/28 Javascript
three.js 实现露珠滴落动画效果的示例代码
2021/03/01 Javascript
python通过线程实现定时器timer的方法
2015/03/16 Python
RC4文件加密的python实现方法
2015/06/30 Python
使用PyCharm配合部署Python的Django框架的配置纪实
2015/11/19 Python
使用anaconda的pip安装第三方python包的操作步骤
2018/06/11 Python
pycharm内无法import已安装的模块问题解决
2020/02/12 Python
Canvas 文本转粒子效果的实现代码
2019/02/14 HTML / CSS
Nike西班牙官方网站:Nike.com (ES)
2017/10/30 全球购物
英国最大的在线快递公司之一:ParcelHero
2019/11/04 全球购物
社会公德演讲稿
2014/05/20 职场文书
食品委托检验协议书范本
2014/09/12 职场文书
行政主管岗位职责
2015/02/03 职场文书
公司开业致辞
2015/07/29 职场文书
2020年元旦晚会策划书模板
2019/12/30 职场文书
python使用matplotlib绘制图片时x轴的刻度处理
2021/08/30 Python
python装饰器代码解析
2022/03/23 Python