Python list 数据类型:列表

列表与字典(还没接触到)是Python中两个主要的数据类型。他们可以被修改,可以增长可以缩短,也可以嵌套。

列表   list

列表可以完成大多数集合类的数据结构实现。它支持字符,数字,字符串甚至可以包含列表(所谓嵌套)。

Python 的列表与C语言中的数组访问方法相同,通过偏移地址访问。

下面举几个列表的例子,图片来自《Python学习手册(第三版)》

image_thumb5[1]

为了加速进度以及方便查询,我们看一下对列表常用操作的整理,图片来自《Python学习手册(第三版)》

image_thumb7[1]

现在我们详细讲一下几个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]表示列表第一项。

上面的程序我们得到了如下的结果:

image_thumb
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:]

image_thumb2

从结果中我们可以看出,第一个片段[: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]

image_thumb3

第一个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

image_thumb5

字符串 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
image_thumb6

可以看到,插入位置是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

image_thumb7

当然我们还有更简单的在末尾扩增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

image_thumb8

看,我们得到了相同的结果!

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中

image_thumb9

我们没有测试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' )

image_thumb10

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' )

image_thumb11

竟然提示错误,当然,这个就是引发了一个异常。之后我们会渐渐认识到这个做法的好处。

5)从列表中删除元素

既然我们插入了元素,那么我们也可以删除他,但是,元素的插入与删除并不像C语言那么麻烦,删除操作是如此的简单,大家看下例子就会了。

当我们知道元素的确切位置的时候,我们使用

del a_list[n]

当我们不知道位置,而是知道删除什么的时候,使用:

a_list.remove(    )

与求元素准确位置一样,如果删除一个list中不存在的元素会引发程序错误。

最后我们确认一点,空列表的布尔值为False,其他的列表均为Ture。

posted @ 2013-02-08 20:40  传说中的福利君  阅读(39922)  评论(7编辑  收藏  举报