2.列表_元组_字典_集合
# 切片操作会生成一个新的序列(而不是提取原先序列的元素) # 创建空列表 list1 = [] # 或 list1 = list() print(list1) # 列表添加元素 # l.append(x) 相当于l[len(l):] = [x] list1.append("12345") print("append", list1) # l.extend(x) 相当于l[len(l):] = x,x不能是数字 list1.extend("54321") print("extend", list1) # 注:extend()不会把对象视为一个整体,而是把它包含的元素逐个添加到列表中 # l.insert(i, x) 相当于l[i:i] = [x],和append()一样会把对象视为一个整体 list1.insert(1, "123") print("insert", list1) # 列表删除元素 # del l[i:j:k] del list1[1] print("del", list1) # l.pop([i]) 相当于 del l[i:i],不给索引默认删除最后一个,类似出栈 list1.pop(1) print("pop", list1) # l.remove(x) 删除列表中第一个值为x的元素 list1.remove('4') print("remove", list1) # l.clear() 相当于 del l[:],区别del l是删除变量,del l[:]是删除列表的数据使之变成空列表 list1.clear() print("clear", list1) # 列表修改元素 相当于重新赋值 list1[0:5] = ['1', '2', '3', '4', '5'] print(list1) # 列表查找元素 # l.count(x) 统计元素x出现的次数 print(list1.count('1')) # l.index(x[,start[,end]]) 返回第一个值为x元素的索引,所以index前最好先count一下 print(list1.index('1')) # 列表实现栈和队列 list3 = list() list3.insert(0, 'a') list3.insert(0, 'b') list3.insert(0, 'c') print("队列 先进先出", list3.pop()) print("队列 先进先出", list3.pop()) print("队列 先进先出", list3.pop()) list4 = [] list4.append('a') list4.append('b') list4.append('c') print("栈 后进先出", list4.pop()) print("栈 后进先出", list4.pop()) print("栈 后进先出", list4.pop()) from collections import deque # 更好的栈和队列实现方式(效率更高) # collecions模块中deque结构体,它被设计成两端存入和读取都很快的特殊list List = deque() List.append('a') List.append('b') List.append('c') print("队列 先进先出", List.popleft()) print("栈 后进先出", List.pop()) print(list(List)) # 创建元组(一旦创建元素不能修改,只能重新赋值或者删除) tuple1 = () # 或tuple1 = tuple() tuple2 = ('a', 'b') tuple3 = ('a',) # 创建单个元素的元组,必须要加上一个逗号,不加的话会视为一个字符串 tuple4 = ('abc') print(tuple1, tuple2, tuple3, tuple4) # 创建字典 dict1 = {} # 或 dict1 = dict() print(dict1) # fromkeys()方法创建dict.fromkeys(list, value=None) list1 = list("12345") dict1 = dict.fromkeys(list1, 60) print(dict1) # 访问字典 print(dict1['1']) # 通过键名访问字典dicname[keyname] print(dict1.get('7','该键不存在')) # dictname.get(key[,defaut]) 键不存在时,返回default的值,如果不指定返回None # 删除字典 # del dict1 # 不真正删除,后面还会用到 # 映射函数创建 ''' 方式一: demo = dict(str1=value1, str2=value2, str3=value3) 注:字符串不能带引号 方式二: demo = (['one', 1], ['two', 2], ['three', 3]) 注:组合是列表或元组都行 a = dict(demo) 方式三: keys = ['one', 'two', 'three'] 注:键只能是字符串、元组和数字,不能是列表,列表是可以变的。 values = (1, 2, 3) demo = dict(zip(keys, values)) ''' # 字典操作-增,直接给不存在的key赋值 dict1['new'] = 30 print(dict1) # 字典操作-删 del dict1['1'] print(dict1) # 字典操作-改 dict1['new'] = 20 print(dict1) # 字典操作-查,基于key来判断 print('2' in dict1) print('old' in dict1) # keys()用于返回字典中所有的键 print(dict1.keys()) # values()用于返回字典中所有的值 print(dict1.values()) # items()用于返回字典中所有的键值对 print(dict1.items()) # copy() dict1 = {'one':1, 'two':2, 'three':[1,2,3]} dict2 = dict1.copy() # 重新申请一块内存存放数据 dict1['one'] = 2 # dict1的值改变,不会影响dict2 dict1['three'].pop() # dict1的值为列表的地址,改变该地址对应的数据会影响dict2 print(dict2) # update(),key存在则更新value,不存在则添加新的键值对 dict1.update({'one':3, 'four':4}) print(dict1) # pop(key)和popitem() dict1.pop('four') # 删除指定键值对 print(dict1) dict1.popitem() # 后进先出的顺序删除键值对 print(dict1) # setdefault(key[,default])如果key存在,则返回value,不存在则插入值为default的键值对,并返回default。default默认为None dict1.setdefault('three') print(dict1) # 使用字典格式化字符串 dict2 = {'小明':60, '小李':80, '小王':99} print(dict2) print('小明的成绩:%(小明)s 小李的成绩:%(小李)s' % dict2) # %后面,把键通过圆括号括起来,再%后面跟字典名 # 创建集合(唯一性,无序性) set1 = {1, 'c', 1, (1,2,3), 'c'} set2 = set("abcddaf") # 创建空集合需要使用set(),使用{}会认为是空字典 print(set1, set2) # 访问集合(集合是无序的,无法使用下标访问,最常用的方法就是循环结构访问) for a in set1: print(a, end=' ') print() # 删除集合 # del(set1) #集合操作-增,只能添加不可变数据,不支持添加列表、字典这类可变数据 set1.add(2) print(set1) #集合操作-删 set1.remove(2) # 也可以使用discard(),用法与remove()完全相同,唯一区别是删除失败时,不抛出异常 print(set1) # 交集,并集,差集 print("交集:", set1 & set2) print("并集:", set1 | set2) print("差集:", set1 - set2) # 取一个集合中,另一个集合没有的元素 print("对称差集:", set1 ^ set2) # 取集合A和B中不属于A&B的元素 # frozenset集合(set集合的不可变版本) # set 集合中所有能改变集合本身的方法,比如 remove()、discard()、add() 等,frozenset 都不支持;set 集合中不改变集合本身的方法,fronzenset都支持。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)