跳转至

python 序列和列表


2015-12-01 by dongnan

数据结构

数据结构是通过某种方式组织在一起的数据元素的集合,这些数据元素可以是数字或者字符,甚至可以是其它数据结构。

在python 中最基本的数据结构是序列,序列中的每个元素被分配一个序号,即元素的位置,也称谓索引

python 有6种内建的序列: 最常用的两种类型列表元组,其它的分别为,字符串unicode字符串,buffer对象和 xrange对象。

第一个列表

列表的各个元素通过逗号分割,写在方括号中,另外列表也可以包含其它的序列。

>>> meta = ['dongnan',30, 'male', ['2015', '2016']]
>>> type(meta)
<type 'list'>

而列表与元组的主要区别,列表可以修改,元组则不能。

# list
>>> l1 = [1,2,3]
>>> l1[0] = 5
>>> l1
[5, 2, 3]

# tuple
>>> t1 = (1,2,3)
>>> t1[0] = 5
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment

序列

序列基本操作

这些操作包括:索引,分片,加,乘,检查成员资格,除此之外python还有计算序列长度,找出最大和最小元素的内建函数。

使用加号可以进行序列的连接操作

>>> [1,2,3] + [4,5,6]
[1, 2, 3, 4, 5, 6]
>>> "hello, " + "world!"
'hello, world!'

错误信息说明,只有两种相同类型的序列才能进行连接操作。

>>> [1,2,3] + 'world!'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: can only concatenate list (not "str") to list

乘法

>>> 'python' * 3
'pythonpythonpython'
>>> [42] * 5
[42, 42, 42, 42, 42]

成员资格

检查某个值是否在序列中,可以使用in 运算符,条件为真返回True ,条件为假返回False 这样的运算符叫做布尔运算符,其值叫做布尔值。

>>> users = ['dongnan','ywwd','zongming']
>>> raw_input('Enter your user name: ') in users
Enter your user name: dongnan
True

长度、最小值和最大值

  • len 函数返回序列中所有包含元素的数量。
  • min 函数返回序列中最小的元素。
  • max 函数返回序列中最大的元素。

内建函数,len/min/max 非常有用;

>>> numbers = [100,34,678]
>>> len(numbers)
3
>>> max(numbers)
678
>>> min(numbers)
34

索引

序列中的所有元素都是有编号的,从0开始递增。

>>> greeting = 'hello'
>>> greeting[0]
'h'

通过索引获取元素,所有序列都可以通过这种方式进行索引,使用负数索引时,python会从右边也就是从最后第一个元素开始计数。

>>> greeting[-1]
'o'

分片

使用分片操作来访问一定范围内的元素,分片通过冒号相隔的两个索引来实现。

>>> tag = '<a href="http://ywwd.net"> dongnan web site</a>'
>>> tag[9:24]
'http://ywwd.net'
>>> tag[27:-4]
'dongnan web site'

分片的编号非常重要,第1个索引是需要提取部分的第1个元素编号,而最后的索引则是分片之后剩下部分的第1个元素编号。

分片取值的实现需要提供两个索引作为边界,第1个值索引的元素是包含在分片内的,第2个值个则不包含在分片内

>>> numbers = [1,2,3,4,5,6,7,8,9,10]
>>> numbers[3:6]
[4, 5, 6]
>>> numbers[0:1]
[1]

访问最后三个元素

>>> numbers[7:10]  # 索引10指向的是第11个元素,这个元素并不存在。
[8, 9, 10]

实际上,只要分片中最左边的索引比它右边的晚出现在序列中,结果就是空的序列。

>>> numbers[-3:0]
[]   #空的

如果分片包括序列结尾的元素,只需空置最后一个索引即可。

>>> numbers[-3:]
[8, 9, 10]

同样的方法适用与序列开始元素。

>>> numbers[:3]
[1, 2, 3]

如果复制整个序列,可以将两个索引空置。

>>> numbers[:]  #全部
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

步长

默认步长是1,分片操作就是按照这个步长逐个遍历序列的元素。

>>> numbers[0:10:1]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

设置步长

>>> numbers[0:10:2]
[1, 3, 5, 7, 9]
>>> numbers[::4]
[1, 5, 9]

步长也可以是负数,即从右到左提取元素。

>>> numbers[::-1]
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]

欢迎关注微信公众号: 运维录

Back to top