Python list 数据类型:列表
列表与字典(还没接触到)是Python中两个主要的数据类型。他们可以被修改,可以增长可以缩短,也可以嵌套。
列表 list
列表可以完成大多数集合类的数据结构实现。它支持字符,数字,字符串甚至可以包含列表(所谓嵌套)。
Python 的列表与C语言中的数组访问方法相同,通过偏移地址访问。
下面举几个列表的例子,图片来自《Python学习手册(第三版)》
为了加速进度以及方便查询,我们看一下对列表常用操作的整理,图片来自《Python学习手册(第三版)》
现在我们详细讲一下几个list的操作。
首先我们明确,Python的list可以容纳任何对象。不管他是什么格式的。
1)创建list
创建列表的操作非常简单,只要用中括号报过一系列逗号分隔的值就可以了。就像第一个图片上那样。
2)list 切片
定义新列表后,我们可以列表中的任何一个部分作为新的列表,该技术在dive in python 中称为切片。
让我们直接看程序。
a_list =['a','b','c','d','e','f'] # 创建一个列表 print a_list[1:3] # 在屏幕上打印一个切片
值得注意的是,在list偏移访问中,与C中数组类似,同样用a_list[0]表示列表第一项。
上面的程序我们得到了如下的结果:
b c 分别是列表中第二,第三个元素,序号应该是1 和2 ,可以看出,对于 a_list[x,y] 的切片,切片片段为序号x到y-1之间的内容。
我们也可以截取半段,让我们看程序
# 位置 1 2 3 4 5 6
# 序号 0 1 2 3 4 5
a_list =['a','b','c','d','e','f'] # 定义 print a_list[:3] print a_list[3:]
从结果中我们可以看出,第一个片段[:3] 取的是从第一位到第三位的片段,而[3:] 获取的是从第四位,到结尾的片段。
无论列表多长[:n]片段中总含有n个元素。
如果将x,y都留空,那么程序将取列表内全部的元素,但是却获得了一个新的列表。
如果x , y中有负数怎么办,让我们来看一下
# 位置 1 2 3 4 5 6 # 序号 0 1 2 3 4 5 a_list =['a','b','c','d','e','f'] print a_list[-1:3] print a_list[3:-1]
第一个print输出了空的list, 第二个却输出了两个。 认真看我们可以看出,负数是指从右往左数,正数是指,从左往右。
3)向列表list中添加元素
从第三题中,我们认识到append可以向list中添加元素。
a_list.append('NEW')
让我们测试一下这句话.
# 位置 1 2 3 4 5 6 # 序号 0 1 2 3 4 5 a_list =['a','b','c','d','e','f'] a_list.append('NEW') print a_list
字符串 NEW 已经被添加到该列表结尾处了.
当然除了append 这种只能在末尾添加 元素 的操作来说,我们还要插入操作
a_list.insert( n,35434)
insert 后面有两个操作符, 那么n表示插入哪个元素之后, 那串数表示插入什么东西,当然任何类型的都可以,让我们试一下这个新认识的方法.
# 位置 1 2 3 4 5 6 # 序号 0 1 2 3 4 5 a_list =['a','b','c','d','e','f'] a_list.insert(2,'NEW') print a_list a_list.insert(6,43223452) print a_list
可以看到,插入位置是n号元素之前。
这两种操作都是单个元素插入,当我们需要将大量数据放在列表末尾的时候,我们就需要另一个新的方法了。
a_list.extend( [ 'fdaf',342 ] )
看一下例子就好了.
# 位置 1 2 3 4 5 6 # 序号 0 1 2 3 4 5 a_list =['a','b','c','d','e','f'] a_list.extend( [ 'fdaf',342 ] ) print a_list
当然我们还有更简单的在末尾扩增list的方法.
+
没错,就是一个符号.
# 位置 1 2 3 4 5 6 # 序号 0 1 2 3 4 5 a_list =['a','b','c','d','e','f'] a_list+=[ 'fdaf',342 ] print a_list
看,我们得到了相同的结果!
4)在列表中查询
在C语言中,遍历数组什么的是常见的问题,我们需要知道,数组中有没有某个元素,某个元素在数组中的什么位置,某个元素在数组中出现的次数 等等等。这些也许在C中需要长篇累牍的描述算法,但是Python丰富的库资源已经把这些问题解决了。让我们看看下面的表吧:
a_list.count( 'NEW' ) #计算出现次数 a_list.index( 'NEW' ) #寻找第一次出现的位置 'NEW' in a_list #确认元素是否出现在list中
现在我们测试一下这几种功能。
# 位置 1 2 3 4 5 6 # 序号 0 1 2 3 4 5 a_list =['a','b','c','d','e','f'] print a_list.count( 'NEW' ) #计算出现次数 print 'NEW' in a_list #确认元素是否出现在list中
我们没有测试index,因为index 有个比较有趣的现象,让我们来试一下。
# 位置 1 2 3 4 5 6 7 # 序号 0 1 2 3 4 5 6 a_list =['a','b','c','d','e','f','NEW'] print a_list.index( 'NEW' )
list中存在NEW,返回了正确的值。如果没有NEW会怎么样的呢
# 位置 1 2 3 4 5 6 # 序号 0 1 2 3 4 5 a_list =['a','b','c','d','e','f'] print a_list.index( 'NEW' )
竟然提示错误,当然,这个就是引发了一个异常。之后我们会渐渐认识到这个做法的好处。
5)从列表中删除元素
既然我们插入了元素,那么我们也可以删除他,但是,元素的插入与删除并不像C语言那么麻烦,删除操作是如此的简单,大家看下例子就会了。
当我们知道元素的确切位置的时候,我们使用
del a_list[n]
当我们不知道位置,而是知道删除什么的时候,使用:
a_list.remove( )
与求元素准确位置一样,如果删除一个list中不存在的元素会引发程序错误。
最后我们确认一点,空列表的布尔值为False,其他的列表均为Ture。