1.Python内置数据结构
(1)list
- python 的list是一个有序队列,list的元素可以包含“数字,字符、list、dict”等数据类型,是一种可变的,不可hash的线性数据结构
- list的定义方式:
list=list() #定义一个空的list
list=[] #定义一个空list
list=['1',1,2,3] #定义一个list的内容
list=list(range(100)) #迭代对象
- list的索引:
- 正向索引:索引从0开始,从头开始
- 反向索引:索引从-1开始,从列表尾部开始
#!/usr/bin/python # -*- coding: utf-8 -*- list=list(range(10)) print(list) #[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] print(list[0]) #0 print(list[-1]) #9 print(list[-2]) #8
- list的遍历:
#!/usr/bin/python
# -*- coding: utf-8 -*-
list=list(range(5))
# 方法1
print ('遍历列表方法1:')
for i in list:
print("序号:%s 值:%s" % (list.index(i), i))
# 方法2
print ('\n遍历列表方法2:')
for i in range(len(list)):
print("序号:%s 值:%s" % (i, list[i]))
# 方法3
print ('\n遍历列表方法3:')
for i, val in enumerate(list):
print("序号:%s 值:%s" % (i, val))
遍历列表方法1:
序号:0 值:0
序号:1 值:1
序号:2 值:2
序号:3 值:3
序号:4 值:4
遍历列表方法2:
序号:0 值:0
序号:1 值:1
序号:2 值:2
序号:3 值:3
序号:4 值:4
遍历列表方法3:
序号:0 值:0
序号:1 值:1
序号:2 值:2
序号:3 值:3
序号:4 值:4
index方法:列表索引,通过值查找在列表中的索引位置,有多个相同值时仅返回找到的第一个值的索引,可以定义查找的起始和结束位置。
list.index(value,start,stop) #stop的值可以超出列表长度 起始位置为负数则是倒序查询
# -*- coding: utf-8 -*-
list=[1,2,3,4,5,2]
print(list.index(3,2,10)) # 5
count方法:查找列表中值的个数
# -*- coding: utf-8 -*-
list=[1,2,3,2,5,2]
print(list.count(2)) # 3
- list的各个操作
- count方法:查找列表中值的个数
list=[2,3,4,6,2,8,3,1,2] print(list.count(3)) # 2
2. len计算数据类型的长度:属于内置函数,它可以计算元组,列表,字符串等数据类型的长度
list=[1,2,3,4,5] print(len(list)) # 5
3. append:列表追加元素,从列表尾部追加,速度快,O(1)
list=[1,2,3] list.append(4) print(list) #[1,2,3,4]
4. inster:指定索引处插入元素(对象)
# -*- coding: utf-8 -*- list=[1,2,3,4] list.insert(1,1) print(list)#[1,1,2,3,4]
5.extend:扩展可迭代对象
list1=[1,2,3] list2=[4,5] list1.extend(lst2) print(list1) #[1, 2, 3, 4, 5]
6.remove:根据值删除元素,一次删除一个值,多个值是要删除多次
list=[1,2,3] list.remove(3) print(list) # [1,2]
7.pop:通过指定索引删除值并返回删除的值,不指定索引则是删除列表的最后一个元素并返回剩下的值
list=[1,2,3,4] print(list.pop(2)) # 3 print(list.pop()) # 4
8.clear:清空整个列表元素
9.sort:排序
list=[2,1,3,4] list.sort(reverse=True) #reverse=True为降序,reverse=False为升序 list=['a','b',c'','d'].sort()#对字符串排序,根据ASCII码排序
10.copy:列表的复制,浅复制又叫shadow copy,列表中嵌套可变数据类型(如列表)时 该列表是添加了 子列表的地址引用(子列表分配了独立的内存空间)而非正在的列表数据。深复制需要import copy模块 copy模块提供了deepcopy方法,该方法会去递归复制可变对象的每一个的值。
# -*- coding: utf-8 -*- import copy list=[1,2,[9,0,40],4] list1=list.copy() #浅复制 只copy list[2]的引用,如果修改了list,copy的list1的子列表list1[2]的值也会随着改变 print(list1) list2=list.copy.deepcopy()#深复制,该方法会递归复制每一个值,修改list之后list2[2]的值不会随着改变 print(list2) list[2][0]=100 print(list1)#[1,2,[100,0,40],4] print(list2)#[1,2,[9,0,40],4]
- list各个操作的时间复杂度:
Python的list的insert(0,value)要比append(value)的操作时间大得多,原因是list中的元素保存在一片连续的内存区域中,这样的话只有知道元素索引就能确定元素的内存位置,从而直接取出该位置上的值,但是它的缺点在于前插需要移动元素,而且随着list中元素的增多需要移动的元素也就越多,花费的时间也就自然多了。