Python list、deque、set、dict总结

list

list使用[],元素之间使用,进行分割;是一种有序排列的数组。(本质上是一个栈)

特点

  1. list中元素按顺序有序排序;
  2. list索引映射唯一数据;
  3. list可以添加重复数据;
  4. list中任意数据类型可以混存;
  5. list可以根据需要动态分配和回收内存。

基本操作

创建

  1. 使用中括号[]

    lst = ['hello','world',123]
    
  2. 调用内置函数list()

    lst = list(['hello','world',123])
    
  3. 使用range()

    lst = [i*i for i in range(0, 10)]
    #返回结果[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
    

查询操作

获取指定元素的索引

index()函数:

  1. 如果列表中存在N个相同元素,只返回相同元素中的第一个元素的索引;
  2. 如果查询的元素在列表中不存在,运行时会报ValueError
  3. 可以在指定的start和stop之间进行查找
lst = ['hello', 'world', 123, 'world']
id = lst.index('world')		#返回值为1
id = lst.index('python')	#ValueError: 'python' is not in list
id = lst.index('world', 2, 4)	#返回值为3
#index()第一个参数为要查找的值,第二个参数为start(包含start),第三个参数为stop(不包含stop)
获取列表中的单个元素
  1. 正向索引从0到n-1;
  2. 逆向索引从-n到-1;
  3. 指定索引不存在,运行时会报IndexError
获取列表中的多个元素
  1. 语法结构:

    lst[start : stop : step]
    
  2. 切片结果:原列表片段拷贝

  3. 切片范围:[start, stop]

  4. step默认值为1;若step为正数,start默认为第一个元素,stop默认为最后一个元素;若step为负数,start默认为最后一个元素,stop默认为第一个元素。

判断指定元素是否存在

使用in或not in判断指定元素在列表中是否存在;

元素 in 列表; 元素 not in 列表

增加元素

  1. append():在列表的末尾添加一个元素

    lst = [10, 20, 30]
    lst.append(100)		#此时列表为[10, 20, 30, 100]
    
  2. extend():在列表的末尾至少添加一个元素

    lst1 = [10, 20, 30]
    lst2 = [40, 50]
    lst1.append(lst2)	#若执行该步骤,则返回[10, 20, 30, [40, 50]]
    lst1.extend(lst2)	#若执行该步骤,则返回[10, 20, 30, 40, 50]
    
  3. insert():在列表的任意位置添加一个元素

    lst = [10, 20, 30]
    lst.inster(1, 90)	#返回[10, 90, 20, 30]
    
  4. 切片:在列表的任意位置添加至少一个元素

    lst = [10, 20, 30]
    lst2 = [50, 60, 70]
    lst[1:] = lst2 		#返回[10, 50, 60, 70]
    

删除元素

  1. remove():一次删除一个元素;重复元素只删除第一个;元素不存在,则报错ValueError

    lst = [10, 20, 30, 40, 20]
    lst.remove(20)		#返回[10, 30, 40, 20]
    
  2. pop():删除一个指定索引位置上的元素;指定索引不存在则报错IndexError

    lst = [10, 20, 30, 40, 20]
    lst.pop(1)		#返回[10, 30, 40, 20]
    

    注:默认删除列表的最后一个元素。

  3. 切片:一次至少删除一个元素

    #产生一个新列表
    lst = [10, 20, 30, 40, 20]
    lst_new = lst[1:3]
    #此时,lst = [10, 20, 30, 40, 20],lst_new = [20, 30]
    
    #不产生新列表
    lst = [10, 20, 30, 40, 20]
    lst[1:3] = []
    #返回结果:lst = [20, 30]
    
  4. clear():清空列表

  5. del:删除列表

    lst = [20, 30]
    del lst
    

修改

  1. 为指定索引的元素赋予一个新值

    lst = [10, 20, 30, 40]
    lst[1] = 50		#返回[10, 50, 30, 40]
    
  2. 为指定的切片赋予一个新值

    lst = [10, 20, 30, 40]
    lst[1:3] = [100, 200, 300, 400] 	#返回[10, 100, 200, 300, 400, 40]
    

排序

  1. 调用sort()方法,列表中的所有元素默认按照从小到大的顺序进行排列;当指定reverse=True,则按降序排序;

    lst.sort()
    
  2. 调用内置函数sorted(),指定reverse=True,则按降序排序;原列表不发生改变,将会产生一个新的列表。

    lst_new = sorted(lst)
    

时间复杂度

由于list的存储数据的复杂性,因此,在对list进行一些查询等基本操作时,时间复杂度为O(n);具体的各个操作的时间复杂度如下,n是容器中当前的元素数,k是需要操作的元素个数。

操作时间复杂度操作时间复杂度
copyO(n)appendO(1)
insertO(n)pop()O(1)
remove(i)O(n)pop(i)O(n)
deleteO(n)extendO(k)
sortO(nlogn)inO(n)
min,maxO(n)lenO(1)

deque

deque是一种能在队列两端都进行入队、出队操作的数据结构,比普通的队列更加灵活也更加复杂。

基本操作

创建

d = collections.deque() #创建一个空队列
d = collections.deque(['a','b','c']) #从list创建
d = collections.deque(('a','b','c')) #从tuple创建
d = collections.deque({'a':0,'b':1,'c':2}) #从dict创建
d = collections.deque("abc") #从字符串创建

增加元素

d.append('d') #向右边增加一个元素'd'
d.appendleft('+') #向左边增加一个元素'+'

extend和extendleft,用于将一个可迭代对象的所有迭代值,依次加入到队列的右边或者左边

d1 = collections.deque()
d1.extend("123")	#输出结果为:deque(['1', '2', '3'])
d2 = collections.deque()
d2.extendleft("123")	#输出结果为:deque(['3', '2', '1'])

删除元素

d.pop() #从右边删除一个元素
d.popleft() #从左边删除一个元素

时间复杂度

操作时间复杂度操作时间复杂度
copyO(n)appendO(1)
extendO(k)appendleftO(1)
extendleftO(k)popO(1)
removeO(n)popleftO(1)

set

set使用(),是一种无序数组,set中的内容不能重复。

基本操作

创建

s = set()
s = set(['a', 'b', 'c'])
s = set([('a', 1), ('b', 2), ('c', 3)])

增加元素

s = set(['a', 'b', 'c'])
s.add('d')

删除元素

s = set(['a', 'b', 'c'])
s.remove('c')

查询

使用in或not in判断指定元素在列表中是否存在;

元素 in 列表; 元素 not in 列表

时间复杂度

操作时间复杂度操作时间复杂度
inO(1)addO(1)
pop()O(1)pop(i)O(n)
remove(i)O(n)iterationO(n)

dict

dict是以键值对的方式存储数据,字典是一个无序的序列;

dict的存储是将key通过hash函数计算位置,然后将其放到对应位置中;

dict是根据key查找value所在的位置。

dict的查找效率是非常高的,其查找过程是将key通过hash函数计算得到位置,然后取出对应的值。

特点

  1. dict中的所有元素都是键值对,key不能重复,但value可以重复
  2. dict中的元素是无序的
  3. dict中的key必须是不可变对象(例如int,str;list是可变对象,因此不能作为key)
  4. dict可以根据需要动态地伸缩
  5. dict会浪费较大的内存,是一种使用空间换时间的数据结构

基本操作

创建

  1. 常用方式:使用花括号;

    #冒号左边为key,右边为value
    student = {'name': '张三', 'age': 30}
    
  2. 使用内置函数dict()

    #等号左边为key,右边为value
    student = dict(name = '张三', age = 30)
    

取值

  1. 使用[]进行取值:如果字典中不存在指定的key,则输出keyError;

    student = {'name': '张三', 'age': 30}
    nm = student[name]	#返回结果为'张三'
    sx = student[sex]	#输出keyError
    
  2. get()方法:如果字典中不存在指定的key,则返回None

    student = {'name': '张三', 'age': 30}
    nm = student.get('name')		#返回结果为'张三'
    sx = student.get('sex')			#返回结果为None
    sc = student.get('score', 100)	#返回结果为100,但该键值对不会新增到字典中
    

key的判断

  1. in:指定的key在字典中存在,返回True;
  2. not in:指定的key在字典中不存在,返回False。

增加元素

student = {'name': '张三', 'age': 30}
student['sex'] = '女'

删除元素

  1. 删除指定的键值对

    student = {'name': '张三', 'age': 30}
    del student['name']		#将key为name的键值对删除
    
  2. 清空字典的元素

    student = {'name': '张三', 'age': 30}
    student.clear()
    

修改

student = {'name': '张三', 'age': 30}
student['age'] = 20

时间复杂度

操作时间复杂度操作时间复杂度
inO(1)copyO(n)
addO(1)delO(1)
iterationO(n)
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值