【Python】数据结构:列表,中括号表示[ ]
python内置了多种类型的数据结构,最常用包括:列表、元组、集合和字典。
1.列表list
有序,可通过索引查找
list1 = [1,3,5,7,100] list2 = ['hello']*3 #表示为:['hello','hello','hello'] print(len(list1)) #5,list1的长度 print(list1[0]) #1,索引取值 print(list1[4]) #100 print(list1[5]) #IndexError:list index out of range print(list1[-1]) #100,想象成一个环 print(list1[-3]) #5 list1[2] = 300 #赋值
(2)list的遍历
for index in range(len(list1)): #通过下标遍历 print(list1[index]) for elem in list1: #for循环直接遍历元素 print(elem) for index,elem in enumerate(list1): #使用enumerate函数可同时获得索引和值 print(index,elem)
(3)list添加删除等操作
list1 = [1,3,5,7,100] list1.append(200) #添加到末尾 list1.insert(1,400) print(list1) #[1, 400, 3, 5, 7, 100, 200] list1.extend([1000,2000]) #合并两个列表 #list1+=[1000,2000] print(list1) #[1, 400, 3, 5, 7, 100, 200, 1000, 2000] if 3 in list1: #删除列表中的某个值 list1.remove(3) if 1234 in list1: list1.remove(1234) list1.pop(0) #通过索引来删 list1.pop(len(list1)-1) #删除最后一个 print(list1) #[400, 5, 7, 100, 200, 1000] list1.clear() #清空列表 print(list1) #[]
(4)列表的切片
通过切片将列表复制或将列表中的一部分取出来创建新的列表
students1 = ['张三','李四','王五','赵六'] students1 += ['钱七','老八','鬼九'] #合并 students2 = students1[1:4] #左闭右开 1~4 print(students2) #['李四', '王五', '赵六'] students3 = students1[:] #通过完整切片来复制列表 print(students3) #['张三', '李四', '王五', '赵六', '钱七', '老八', '鬼九'] students4 = students1[-3:-1] print(students4) #['钱七', '老八'] students5 = students1[::-1] #反向切片获得倒转列表 print(students5) #['鬼九', '老八', '钱七', '赵六', '王五', '李四', '张三']
(5)列表的排序
list1 = ['orange', 'apple', 'zoo', 'international', 'blueberry'] list2 = sorted(list1) # sorted函数不会修改list1,默认字母表排序 print(list2) # ['apple', 'blueberry', 'international', 'orange', 'zoo'] list3 = sorted(list1, reverse=True) print(list3) # ['zoo', 'orange', 'international', 'blueberry', 'apple'] list4 = sorted(list1, key=len) # 根据字符串长度排序 print(list4) # ['zoo', 'apple', 'orange', 'blueberry', 'international'] list1.sort(reverse=True) # 直接在列表对象上排序 print(list1) # ['zoo', 'orange', 'international', 'blueberry', 'apple']
2.生成式和生成器
(1)使用生成式语法来创建列表
f = [x for x in range(1,10)] print(f) # [1, 2, 3, 4, 5, 6, 7, 8, 9] f = [x+y for x in 'ABCDE' for y in '1234567'] print(f) # ['A1', 'A2', 'A3', 'A4', 'A5', 'A6', 'A7', 'B1', 'B2', 'B3', 'B4', 'B5', 'B6', 'B7', 'C1', 'C2', 'C3', 'C4', 'C5', 'C6', 'C7', 'D1', 'D2', 'D3', 'D4', 'D5', 'D6', 'D7', 'E1', 'E2', 'E3', 'E4', 'E5', 'E6', 'E7'] import sys f = [x**2 for x in range(1,1000)] #中括号 print(sys.getsizeof(f)) #查看对象占用内存的字节数 9024 print(f) # [1, 4, 9, 16, 25, 36...
(2)创建生成器对象
通过该对象获取到数据,不占用额外的空间存储数据,每次需要数据时通过内部运算得到数据(需要花费额外的时间)。
f = (x**2 for x in range(1,1000)) #普通括号 print(sys.getsizeof(f)) # 120 print(f) # <generator object <genexpr> at 0x000001B3EA017748> for val in f: print(val) # 1 4 9 16 25...
(3)使用yield关键字将普通函数改造成生成器函数
已知菲波那切数列
def fib(n): a,b = 0,1 for _ in range(n): a,b = b,a+b yield a def main() for val in fib(20): print(val) if __name__=='__main__': main()
参考链接
1.彻底理解Python中的yield
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本