2015/9/1 Python基础(6):列表

列表和字符串类型很相似,是同样的序列式数据类型。
但是字符串只能由字符组成,列表可以保留任意数目的Python对象的灵活的容器。
Python的列表比C的数组要灵活,数组里面只能是一种类型,列表可以有多种。
列表可以执行pop,empt,sort,reverse等操作,可以添加或减少元素。可以和其他的列表结合或者把一个列表分成几个,可以对单独的元素执行insert,update或者remove操作。
创建列表是用[]来定义的,也可以用工厂方法创建

>>> aList = [12,'abc',1.23,['list','in']]
>>> anotherList = [None, 'something']
>>> print aList
[12, 'abc', 1.23, ['list', 'in']]
>>> print anotherList
[None, 'something']
>>> aList = []
>>> print aList
[]
>>> list('Python')
['P', 'y', 't', 'h', 'o', 'n']

 

访问列表的值用索引或者切片的方法。这里不赘述。
更新列表
可以像C一样,指定一个索引或者索引范围来更新元素。或者使用append()方法来追加元素到列表中去

>>> aList = list('a1bc')
>>> print aList
['a', '1', 'b', 'c']
>>> aList[0] = 1.2
>>> print aList
[1.2, '1', 'b', 'c']
>>> aList[1:2] = ['x',3]
>>> print aList
[1.2, 'x', 3, 'b', 'c']
>>> aList.append(4.56)
>>> print aList
[1.2, 'x', 3, 'b', 'c', 4.56]

 

删除列表中的元素或者列表(本身)
要删除元素的索引可以使用del语句,否则使用remove()方法

>>> aList
[123, 'abc', 'float replacer', ['inner', 'list'], (7-9j)]
>>> del aList[1]
>>> aList
[123, 'float replacer', ['inner', 'list'], (7-9j)]
>>> aList.remove(123)
>>> aList
['float replacer', ['inner', 'list'], (7-9j)]

 

还可以用pop()方法来删除并从列表中返回一个特定对象。
一般来说不需要去删除一个对象列表,如果想明确地删除一整个列表可以用del语句:del aList

Python没有专门用于列表类型的操作符,但是有属于自己的方法。列表有列表解析,是结合了列表的方括弧和for循环。以后会再专门学到列表解析。届时写一个列表解析的内容,这里只写一个简单的例子:

>>> [ i * 2 for i in [8, -2, 5] ]
[16, -4, 10]
>>> [ i for i in range(8) if i % 2 == 0 ]
[0, 2, 4, 6]

内建函数

一些序列类型的函数在列表里非常有用如:
max()、min()、sorted()、reversed()、enumerate()、zip()还有sum()
列表类型内建函数 只有range()函数
列表类型的内建函数
列表有自己的方法,在之后学习。可以用dir()方法来得到一个列表对象的所有方法和属性。

>>> dir(list)
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__delslice__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getslice__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__setslice__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
方法 作用
list.append(obj) 向列表中添加一个对象obj
list.count(obj) 返回一个对象obj 在列表中出现的次数
list.extend(seq) 把序列seq 的内容添加到列表中
list.index(obj, i=0,j=len(list)) 返回list[k] == obj 的k 值,并且k 的范围在 i<=k<j;否则引发ValueError 异常.
list.insert(index, obj)  在索引量为index 的位置插入对象obj.
list.pop(index=-1) 删除并返回指定位置的对象,默认是最后一个对象
list.remove(obj) 从列表中删除对象obj
list.reverse()  原地翻转列表
list.sort(func=None,key=None,reverse=False)  以指定的方式排序列表中的成员,如果func 和key 参数指定,则按照指定的方式比较各个元素,如果reverse 标志被置为True,则列表以反序排列.

 

核心笔记:
可以改变对象值的可变对象的方法是没有返回值的!
Python 初学者经常会陷入一个误区:调用一个方法就返回一个值.最明显的例子就是
sort():

>>> music_media.sort()# 没有输出?
>>>

 

在使用可变对象的方法如sort(),extend()和reverse()的时候要注意,这些操作会在列表
中原地执行操作,也就是说现有的列表内容会被改变,但是没有返回值!是的,与之相反,字符串
方法确实有返回值:

>>> 'leanna, silly girl!'.upper()
'LEANNA, SILLY GIRL!'

 

温习一下,字符串是不可变的 -- 不可变对象的方法是不能改变它们的值的,所以它们必须
返回一个新的对象.
如果用列表一定要返回一个对象,可以使用reversed()和sorted()。

列表特殊特性
用列表构建其他数据结构
用列表容器和可变的特性可以轻松的构造其他数据结构,如堆栈和队列。
具体实现过程不在博文里赘述了。

posted @ 2015-09-01 21:37  #SRL  阅读(809)  评论(0编辑  收藏  举报