python基本的数据结构
Python3中有六个标准的数据类型:Number(数字),String(字符串),List(列表),Tuple(元组),Set(集合),Dictionary(字典)。
下面介绍List,Tuple的数据结构。
1. List(列表)
1.1序列的特点:
Python中一个很基本的数据结构是序列,Python中有6个序列的内置类型,但最常见的是列表和元组。序列都可以进行的操作包括索引,切片,加,减,乘和检查元素,所以下面在列表中所描述的很多方法在元组中也同样适用。
1.2列表的特点:
列表是一个长度不固定,可以随意增添元素的Python序列对象,与下面将要介绍的元组做以区别。列表中的元素可以是不同的类型的数据,且一个数据可以在列表中重复多次。比如[10, 10, 30, 'haoocker']
就是一个列表。
1.3列表的创建:
- 创建空元素:
- 法一:
list1 = []
- 法二:使用内建函数:list = list()
- 法一:
- 创建有元素的列表:
- 法一:
list1 = [30,40,'str']
- 法二:
sqe = ('fool',50,'bar') list1 = list(sqe)
使用内建函数list
参数应该是任意序列或者迭代器
- 法一:
list
函数常用在数据处理中实体化迭代器或生成器:
gen = range(10)
list1 = list(gen)
#list为:[0,1,2,3,4,5,6,7,8,9]
1.4列表元素的增加:
list.append(obj)
表示在列表list1的末尾添加新的对象元素list.insert(index,obj)
表示在列表list1的特定的位置插入对象元素
1.5列表元素的删除:
list.pop([index = -1])
默认移除列表中的最后一个元素(如果不加参数的话)如果有参数就会移除指定位置的值,并且返回该元素的值。del list1[2]
表示删除list1的第二个元素list.remove(obj)
表示移除列表中某个值的第一个匹配项list.clear()
表示清空一个列表中的所有元素
1.6列表元素的修改:
直接使用list[index]=obj
,比如list1[3] = 34
表示将list1的元素修改成为34
1.7列表元素访问和切片:
list.index(obj)
从列表中找出第一个与对象所匹配的索引位置,并返回list[index]
直接根据索引访问列表元素- 列表的切片(截取)也适用于其他类型的序列:
- 切片操作符中的第一个数(冒号之前)表示切片开始的位置,第二个数(冒号之后)表示切片到哪里结束,第三个数(冒号之后)表示切片间隔数。如果不指定第一个数,Python就从序列首开始。如果没有指定第二个数,则Python会停止在序列尾。注意,返回的序列从开始位置开始 ,刚好在 结束 位置之前结束。即开始位置是包含在序列切片中的,而结束位置被排斥在切片外。即区间是左闭右开
- list[1:3]返回从位置1开始,包括位置2,但是停止在位置3的一个序列切片,因此返回一个含有两个项目的切片。类似地,shoplist[:]返回整个序列的拷贝。shoplist[::3]返回位置3,位置6,位置9…的序列切片。
- 可以参考一篇文章:彻底搞懂Python切片操作
1.8列表的基本操作:
- 加操作:
[1, 2, 3] + [4, 5, 6]
结果为[1, 2, 3, 4, 5, 6]
- 乘操作:
['Hi!'] * 4
结果为['Hi!', 'Hi!', 'Hi!', 'Hi!']
- 遍历和迭代
for x in [1, 2, 3]: print(x, end=" ")
结果:1,2,3
1.9列表的排序
- 参考文章:Python list sort()方法
- 其中sort()函数的key参数为function,比如可以根据长度排序则key=len
- 当一个list的元素也是list的话可以指定list的某个字段做为关键字进行排序,需要用到lambda表达式,起到一个函数速写的作用,允许在代码内嵌入一个函数的定义:python3排序 sorted(key=lambda)
- sort和sorted以及对lambda的解释可以参考:Python的sort函数和sorted、lambda和cmp
print(sorted(list2, key=lambda y: len(y[1])))
#将按照list2中list元素的第二个字段的长度进行排序,默认是升序
1.10列表的复制
=
不是赋值,如果a
指向一个对象,然后你赋值b = a
,那么两个变量指向同一个对象:此时b相当于是a的别名
>>> a = [1, 2, 3]
>>> b = a
>>> b is a
True
- 使用
list.copy()
函数进行复制
>>> a = [1, 2, 3]
>>> b = a.copy()
>>> b is a
false
2. Tuple(元组)
2.1元组的特点:
元组是一个固定长度的不可改变的Python序列对象,因此一旦创建之后它的元素是不可增加、删除和修改的,与列表类似它可以承载一组不同类型的数据,比如('haoocker','mike',11,13,23)
这就是一个元组。
2.2元组的创建:
- 创建空元组:
- 法一:
tup1 = ()
- 法二:
tup1 = tuple()
- 法一:
- 创建只有一个元素对象的元组`
- 法一:
tup1 = (50,)
这里必须要加逗号,否则tup1被当做是整型 - 法二:
tup1 = 50,
- 法三:`tup1 = tuple([50])
- 法一:
- 创建一般有元素对象的元组:
tup1 = ('haoocker','mike',11,13,23)
同上依旧有法二和法三,这里就不再举例了。
2.3元组的删除:
因为元组中的值是不可删除的,但是可以使用del语句来删除整个元组
如del tup1
删除元组之后该元组就不能被访问和输出了。
2.4元组的访问:
元组的访问和列表元素的访问很大程度上是相似的,也是使用下标索引来访问元组中的值
tup1= (1, 2, 3, 4, 5, 6, 7 )
print ("tup1[1:5]: ", tup1[1:5])
2.5元组的基本操作:
总结
元组和列表的很多操作同样适用于其他的序列数据结构,还是得要在实践中多尝试和使用。