概念
Python中最基本的数据结构是序列 。Python中包含6种内建的序列:
- 列表
- 元组
- 字符串
- Unicode字符串
- buffer对象
- xrange对象
列表和元祖主要的区别就是:列表可以修改,元组则不可以。
容器
容器基本是包含其他对象的任意对象。序列(元组和列表)和映射(字典)是两类主要的容器。
通用序列操作
所有序列类型都可以进行某些特定的操作,这些操作包括:
- 索引(indexing)
- 分片(slicing)
- 加(adding)
- 乘(multiplying)
- 检查某个元素是否属于序列的成员
- 计算序列长度
- 迭代(iteration)
- 最大或者最小的内建函数等
索引
通过编号访问。
>>> greeting="hello"
>>> greeting[0]
'h'
>>>
如果使用负数索引时,Python会从右边开始进行计数,不过最后一个元素的位置编号为-1而不是0:
>>> greeting="hello"
>>> greeting[0]
'h'
>>> greeting[-1]
'o'
>>>
分片
分片和索引类似,可以操作访问一定范围内的元素。分片通过冒号隔开的两个索引来实现:
//开始到第十个元素打印
>>> tag="https://github.com/crazyandcoder"
>>> tag[0:10]
'https://gi'
//开始到倒数第二个元素打印
>>> tag[0:-1]
'https://github.com/crazyandcode'
>>>
分片操作对于提取序列的一部分是很有用的。第一个索引的元素是包含在分片内的,而第二个则不包含在分片内
如果需要从后往前获取的话,则可以使用下面的索引:
>>> tag[-13:]
'crazyandcoder'
>>>
从前往后,包含第一个的话,则可以使用:
>>> tag[:5]
'https'
>>>
如果复制整个序列,则可以使用将两个索引都设置成空:
>>> tag[:]
'https://github.com/crazyandcoder'
>>>
步长
分片默认的步长为1,分片就是按照这个步长逐个进行遍历序列的元素,返回开始和结束点之间所有的元素。
>>> tag=[1,2,3,4,5,6,7,8,9,10]
>>> tag
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> tag[0:10:1]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>>
第三个参数就是步长,步长不可以为0,但是可以为负数,即从后往前遍历
>>> tag[::4]
[1, 5, 9]
>>> tag[8:3:-1]
[9, 8, 7, 6, 5]
>>> tag[10:0:-2]
[10, 8, 6, 4, 2]
>>> tag[::-2]
[10, 8, 6, 4, 2]
>>> tag[5::-2]
[6, 4, 2]
>>> tag[:5:-2]
[10, 8]
>>>
使用正步长时,开始点的元素(最左边元素)包括在结果之中,而结束点的元素(最右边)则不再分片之内。当使用一个负数作为步长时,必须让开始点大于结束的(索引)。
序列相加
两种同类型的序列才可以进行连接相加操作。
>>> [1,2,3]+[4,5,6]
[1, 2, 3, 4, 5, 6]
>>> [1,2,3]+[a,b,c]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'a' is not defined
>>>
乘法
数字x乘以一个序列,则会重复x次。
>>> "python"*5
'pythonpythonpythonpythonpython'
>>> [1,2,3]*5
[1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3]
是否所属在序列中
通过in 运算符来计算是否在一个序列中,结果返回TRUE和FALSE
>>> permisson="rw"
>>> "w" in permisson
True
>>> "f" in permisson
False
>>>
最大值最小值
len、max、min是Python的内建函数,分别返回序列中包含元素的数量,以及最大值和最小值。
>>> num=[100,2,39,1000]
>>> len(num)
4
>>> max(num)
1000
>>> min(num)
2
>>>
以上就是序列的一些基本操作。