marlboro027
- UID
- 25773
- 帖子
- 1
- 积分
- 2
- 在线时间
- 10 分钟
|
1#
marlboro027 发表于 2007-04-01 15:29
python(8): list
list在python是一种有顺序的、可变的类型,list的成员可以是任何一种python类型,甚至也包括
list,也就是list可以作为另一个list的成员。在list中,实际上保存的只是每一个成员对象的指针。在cpython中,list后台实现用
的就是c中的数组。
list的表示形式用的是一对中括号,成员用逗号隔开:
由
于是list是有顺序的,因此list可以使用类似于string分片的方法访问list的成员。也可以用+进行连接,用*进行扩展,只是需要注意用+进
行连接操作时,+两边的都必须是list。还可以用for ... in
...的形式进行循环运算。list的创建可以使用直接书写的形式,也可以使用内置函数list(seq)把序列类型的seq转成list。还可以使用
range([start,]stop[.step])来生成以一系列整数为成员的list。内置函数list(seq)可以把任何序列类型的seq转换
为list类型。
list的两大特点是:有顺序的、可变的。由于第一个特点,list可以使用类似于string的分片的方法进行操作。
由于第二个特点可以直接改变list而不用创建新的list,可以直接对list进行增、删、改的操作。一定要记住,有些操作不会返回一个新的list。
下面一个一个来看。
计算一个list中有几个成员,类似于string,这个函数是len(),是内置的。会返回一个int值。
往一个list中增加成员有多种方法,一种是用"分片"技术,另一中是调用list的专属函数,还可以使用+。
>>> L=range(3)
- >>> L
- [0, 1, 2]
- >>> L[len(L)] = 3
- >>> L
- [0, 1, 2, 3]
- >>> L.append(4)
- >>> L
- [0, 1, 2, 3, 4]
- >>> L.extend([5, 6])
- >>> L
- [0, 1, 2, 3, 4, 5, 6]
- >>> L = L + [7]
- >>> L
- [0, 1, 2, 3, 4, 5, 6, 7]
第1
行创建一个list。第4行就是用分片的方法进行了增加成员的操作。L[len(L)]实际上是L[3],第4行作用相当于在list的最后增加了一个成
员,即L[3] = 3。相同地往list的头上增加成员,可以用L[:0]=
-1。第7行是用list专属函数append()给list增加了一个成员,它也是在list的最后增加一个成员。append()只可以往list中
增加一个成员,也就是说,如果传给这个函数的是一个list,那么append()只会把这个list整体作为一个成员加到原来的list中。这里还要注
意的是。第7行不会返回一个新的list,它返回的值是None,它的作用是直接改变了L,这与string是不一样的,因为list是可变的,而
string是不可变的,如果是string的话,这行要类似地写成S=S.replace('e','d')。第10行是list专属的另一个函数,它
也是向list的最后添加成员,与append()不同的是,它的参数必须是一个“sequence”类型的,它把这个sequence的每个成员作为
list的成员加进去。第13行,用的是+。与第7行不同,L + [7]会生成一个新的list,因此需要把这个新的list重新赋给L。
再来看看list的删除操作。
- >>> L
- [0, 1, 2, 3, 4, 5, 6, 7]
- >>> L[7:]=[]
- >>> L
- [0, 1, 2, 3, 4, 5, 6]
- >>> L.pop()
- >>> L
- [0, 1, 2, 3, 4, 5]
- >>> del L[5]
- >>> L
- [0, 1, 2, 3, 4]第3
行用的是分片的方法。注意这里不能写成L[7]=[],这样的话会把[]这个空的list作为一个成员替换掉7,也就是说L会变成[0, 1, 2,
3, 4, 5, 6,
[]]。这是因为L[7]代表的是一个值,在这里是一个整数。而L[7:]代表的是list,哪怕它只有一个成员。第6行用的是list专属的pop
([index])函数,默认的是弹出最后一个成员,当然也可以用index来指定弹出哪一个值。第9行用的是del关键字。这有点类似于print,也
是python的关键字。
list的改操作。
- >>> L
- [0, 1, 2, 3, 4]
- >>> L[1:3]=['a', 'b', 'c']
- >>> L
- [0, 'a', 'b', 'c', 4]
- >>> L[0] = "helo"
- >>> L
- ['helo', 'a', 'b', 'c', 4]第3行要重点看一看,L[1:3]表示是的[1, 2]有两个成员,而['a', 'b', 'c']有三个成员,好像相互不匹配。其实可以把改的操作理解为两步,一步是删除,第二步是在删除的位置插入,这样就好理解了。第6行也好理解。
除了上面提到的一些专属函数外,list还有一些专属函数:
- L.append(object)
- L.extend(seq)
- L.pop([index])
- L.count(value) #计算value在L中出现的次数
- L.sort([cmp[, key[, reverse]]])
#
对L进行排序。cmp是一个比较函数,它有两个参数,只能返回-1 0 1 中的一个,分别表示第一个参数比第二个参数小 相等
大。key也是一个函数,只有一个参数,用来给这个参数产生一个用于比较的标志,比如说它可以把所有东西都转成字符串,然后再来比较。reverse是一
个bool值,为真时表示,降序排列。在python2.4之后,才可以使用key和reverse参数,cmp可以为None,表示忽略cmp函数。
- L.reverse() #颠倒L
- L.index(x[,start[,end]]) #返回x在list第一次出现的标号
- L.insert(i, x) #相当于L[i:i]= [x]
- L.remove(x) #相当于del L[L.index(x)]
|