数据结构式通过某种方式(例如对元素进行编号)组织在一起的数据元素的集合,这些数据元素可以是数字或者字符,甚至可以是其他数据结构。
Python中常见的数据结构可以统称为容器(container)。序列(如列表和元组)、映射(如字典)以及集合(set)是三类主要的容器。
在Python中,最基本的数据结构是序列(sequence)。
序列概览
- 序列中的每个元素被分配一个序号–即元素的位置,也称为索引。第一个元素索引是0,第二个则是1,一次类推。
- Python包含6中内建的序列,即列表、元组、字符串、Unicode字符串、buffer对象和xrange对象。其中列表和元组是最常见的类型。
- 列表和元组的主要区别是列表可以修改,而元组不能,如果要根据要求来添加元素,这时候列表适用性会更好,但是当序列不能修改的时候,使用元组则更合适,使用元组与 Python 的运作方式相关。
- 在 Python 中几乎所有的情况下列表都可以替代元组,但是特殊情况不能(当使用元组作为字典的不可修改的键时,此时键不能修改,所以不能使用列表)
- 通用序列操作:索引、分片、序列相加、乘法、成员资格、长度、最小值和最大值
通用序列操作
Python 中所有序列类型都可以进行一些特定的操作,这些操作包括:索引、分片、相加、相乘以及检查某个元素是否属于序列的成员–>成员资格检测 除此之外,Python 还有计算序列长度,找出最大和最小元素的内建函数。
索引
序列中所有的元素都是有编号的–从0开始递增。可以通过编号分别对序列的元素进行访问。Python的序列也可以从右边开始索引,最右边的一个元素的索引为-1,想左开始递减。
greeting = 'Hello'
print(greeting[2])
print(greeting[-1])
print('stringtesting'[3])
分片
分片后面会有详细的总结
索引用来对单个元素进行访问,用分片可以对一定范围内的元素进行访问,分片通过冒号相隔的两个索引来实现。分片操作的实现需要提供两个索引作为边界,第一个索引的元素是包含在分片内的,第二个则不包含在分片内。
序列相加
a = [1,2,3]+[4,5,6]
print(a) # 输出 [1, 2, 3, 4, 5, 6]
b = 'Hello '+'World!'
print(b) # 输出 Hello World!
c = [1,2,3]+'Hello' # 报错
print(c)
Traceback (most recent call last):
File "D:/PycharmProjects/pythonProject/main.py", line 6, in <module>
c = [1,2,3]+'Hello'
TypeError: can only concatenate list (not "str") to list
最后一个例子,试图列表和字符串进行相加,但是出错了,虽然他们都是序列,但是是不同数据类型,不能相加
乘法
用数字x剩以一个序列会生成新的序列,而在新的序列中,原来的序列将会被重复x次。
a = 'python '*4
print(a) #输出python python python python
b = [None]*4 #None为Python的内建值,这里创建长度为4的元素空间,但是什么元素也不包含
print(b) #输出[None, None, None, None]
成员资格
可以使用in运算符来检查一个值是否在序列中,如果在其中,就返回Ture,如果不在,就返回False。
permission='rw'
print('r' in permission) #输出True
print('x' in permission) #输出False
长度、最小值和最大值
内建函数len、min和max分别返回序列所包含的元素的数量,序列中的最小元素和序列中的最大元素。
number = [2, 3, 4, 5, 6, 7, 8, 9, 10]
print(len(number)) #输出9
print(min(number)) #输出2
print(max(number)) #输出10
print(min(4, 3, 5)) #输出3
# 函数的参数不用一定是序列,也可以是多个数字