列表类型也是序列式的数据类型,可通过下标或者切片操作来访问某一个或某一块连续的元素。
列表的元素是可变的,可包含不同类型的元素,列表类型的元素可以是另一个序列类型。
1.创建列表类型数据并赋值
列表使用方括号([])定义,alist = [123, 1.2, 'foo', 7-9j, [1, 2]]
>>> list('foo')
['f', 'o', 'o']
2.访问列表中的值
列表的切片操作和字符串一样,切片操作符([])和索引值或索引范围一起使用。
>>> alist = ['abc', 12.3, ['inner', 'list']]
>>> alist[2][1]
'list'
3.更新列表
在等号的左边指定一个索引或者索引范围的方式来更新一个或几个元素,也可以用append()方法来追加元素到列表中去。
>>> alist
['abc', 12.300000000000001, ['inner', 'list']]
>>> alist[2]
['inner', 'list']
>>> alist[2] = 'inner list'
>>> alist
['abc', 12.300000000000001, 'inner list']
4.删除列表中的元素或者列表本身
明确的知道要删除元素的索引可以用del语句,否则可以用remove()方法
>>> alist
['abc', 12.300000000000001, 'inner list']
>>> alist.remove(12.3)
>>> alist
['abc', 'inner list']
>>> del alist
5.列表操作符
== < > !=
比较操作符比较的时候使用的是内建的cmp()函数,基本的逻辑是:两个列表的元素分别进行比较,直到有一方的元素胜出。
>>> list1 = ['abc', 123]
>>> list2 = ['xyz', 789]
>>> list1 < list2
True
>>> list3 = ['abc', 789]
>>> list2 < list3
False
>>> list1 < list3
True
6.列表类型操作符
切片([]和[:]):列表的切片操作返回的是一个对象或者几个对象的集合。
>>> num_list = [45, 2.2, -2, 6.19e5]
>>> str_list = ['he', 'she', 'it']
>>> num_list[2:-1]
[-2]
>>> str_list[:2]
['he', 'she']
由于列表类型的元素可以是另一个序列类型,意味着可以在列表的元素上也可以使用所有的列表操作符或者在其上执行序列类型内建的各种操作。
>>> mix_list = [4.1, [1, -90.1], 'beef', (-1.9+6j)]
>>> mix_list[1][1]
-90.099999999999994
7.成员关系操作符(in, not in)
列表中(同样适用于元组),可以检查一个对象是否是一个列表(或者元组)的成员
>>> mix_list = [4.1, [1, -90.1], 'beef', (-1.9+6j)]
>>> 'beef' in mix_list
True
>>> 'x' in mix_list
False
8.连接操作符(+)
连接操作符允许我们把多个列表对象合并在一起,列表类型的连接操作只能在同类型之间进行,不能把两个不同类型的对象连接在一起,即使他们都是序列类型也不行
>>> list1 = [1, 2, 3]
>>> list2 = ['a', 'b', 'c']
>>> list1 + list2
[1, 2, 3, 'a', 'b', 'c']
9.重复操作符(*)
列表和元组属于序列类型,可使用重复操作符
>>> list1 = [1, 2, 3]
>>> list1*3
[1, 2, 3, 1, 2, 3, 1, 2, 3]
10.标准类型函数
cmp():
对两个列表的元素进行比较;
如果比较的元素是同类型的,则比较其值,返回结果;
如果两个元素不是同一个类型,则检查它们是否是数字;
如果是数字,执行必要的数字强制类型转换,然后比较;
如果有一方的元素是数字,则另一方的元素"大"(数字是"最小的");
否则,通过类型名字的字母顺序进行比较;
如果有一个列表首先到达末尾,则另一个长一点的列表"大";
如果我们用尽了两个列表的元素而且所有元素都是相同的,那么结果就是平局,返回一个0。
11.序列类型函数
- len():对字符串来说返回字符串的长度,也就是字符个数;对列表或者元组来说,返回列表或元组的元素个数;容器里面的每个对象被当做一项来处理。
>>> mix_list = [4.1, [1, -90.1], 'beef', (-1.9+6j)]
>>> len(mix_list)
4
- max()和min():对只包含数字或者字符串的列表,该函数比较有用;
>>> lstr = ['abc', 'befc', 'cdef']
>>> max(lstr)
'cdef'
- sorted()和reversed():sorted()默认为升序,reserved()反转;
>>> s = ['They', 'stamp', 'when', 'smail']
>>> sorted(s)
['They', 'smail', 'stamp', 'when']
>>> for i in reversed(s):
... print i
...
smail
when
stamp
They
- enumerate()和zip():enumerate()函数同时循环索引和循环元素;zip()返回一个列表,其第一个元素是it0、it1…这些元素的第一个元素组成的一个元组,第二个。。。依此类推;
>>> s = ['They', 'stamp', 'when', 'smail']
>>> for i, m in enumerate(s):
... print i, m
...
0 They
1 stamp
2 when
3 smail
>>>
- sum():求和
>>> sum([1, 2, 3])
6
- list()和tuple():接受可迭代对象作为参数,通过浅拷贝数据来创建一个新的列表或者元组,更多的情况下用于两种类型之间的类型转换。
>>> alist = [1, 2, 3]
>>> atuple = tuple(alist)
>>> alist, atuple
([1, 2, 3], (1, 2, 3))
附录:列表类型内建函数
列表函数 |
作用 |
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.reverse() |
原地翻转列表 |
list.sort(func=None, key=None, reverse=False) |
以指定的方式排序列表中的成员,如果func和key参数指定,则按照指定的方式比较各个元素,如果reverse标志被置为True,则列表以反序排列。 sort()默认的排序算法是归并排序(或者说"timsort")的衍生算法 |
>>> al = [1]
>>> al.insert(0, 12)
>>> al.append('b')
>>> al
[12, 1, 'b']
>>> al.index(1)
1
>>> al.sort()
>>> al
[1, 12, 'b']
>>> al.reverse()
>>> al
['b', 12, 1]