六:数据类型
数据类型
集合
定义
集合是多个元素的无序组合
元素具有唯一性和不可更改性
集合用{}表示,建立集合类型用{}或set(),建立空集合类型,必须使用set()
#使用{}建立集合 A = {"python",123,"("python",123)"} #使用set()建立集合 B = set("python123")
操作符
操作符及应用 | 描述 |
S|T | 并,返回一个新集合,包括在集合S和T中的所有元素 |
S-T | 差,返回一个新集合,包括在集合S但不在T中的元素 |
S&T | 交,返回一个新集合,包括同时在集合S和T中的元素 |
S^T | 补,返回一个新集合,包括集合S和T中的非相同元素 |
S<=T或S<T | 返回True/False,判断S和T的子集关系 |
S>=T或S>T | 返回True/False,判断S和T的包含关系 |
S|=T | 并,更新集合S,包括在集合S和T中的所有元素 |
S-=T | 差,更新集合S,包括在集合S但不在T中的元素 |
S&=T | 交,更新集合S,包括同时在集合S和T中的元素 |
S^=T | 补,更新集合S,包括集合S和T中的非相同元素 |
处理方法
操作函数或方法 | 描述 |
S.add(x) | 如果x不在集合S中,将x增加到S |
S.discard(x) | 移除S中元素x,如果x不在集合S中,不报错 |
S.remove(x) | 移除S中元素x,如果x不在集合S中,产生KeyError异常 |
S.clear() | 移除S中所有元素 |
S.pop() | 随机返回S的一个元素,更新S,若S为空产生KeyError异常 |
S.copy() | 返回集合S的一个副本 |
len(S) | 返回集合S的元素个数 |
x in S | 判断S中元素x,x在集合S中,返回True,否则返回False |
x not in S | 判断S中元素x,x不在集合S中,返回True,否则返回False |
set(x) | 将其他类型变量x转变为集合类型 |
#遍历 #1、 A = {"p","y",123} for item in A: print(item, end="") #2、 try: while True: print(A.pop(), end="") except: pass
应用场景
包含关系比较
"p" in {"p","y",123} {"p","y"} >= {"p","y",123}
数据去重:元素无重复
ls = ["p","p","y","y",123] s = set(ls) # 利用集合无重复元素的特点 lt = list(s) # 还可以将集合转换为列表
序列类
定义
具有先后关系的一组元素
处理函数及方法
操作符及应用 | 描述 |
x in s | 如果x是序列s的元素,返回True,否则返回False |
x not in s | 如果x是序列s的元素,返回False,否则返回True |
s + t | 连接两个序列s和t |
s*n 或 n*s | 将序列s复制n次 |
s[i] | 索引,返回s中的第i个元素,i是序列的序号 |
s[i:j] 或 s[i:j:k] | 切片,返回序列s中第i到j以为步长的元素子序列 |
ls = ["python", 123 ,".io"] print(ls[::-1]) s = "python123.io" print(s[::-1])
函数和方法 | 描述 |
len(s) | 返回序列s的长度,即元素个数 |
min(s) | 返回序列s的最小元素,s中元素需要可比较 |
max(s) | 返回序列s的最大元素,s中元素需要可比较 |
s.index(x)或 s.index(x,i,j) |
返回序列s从i开始到j位置中第一次出现元素x的位置 |
s.count(x) | 返回序列s中出现x的总次数 |
ls = ["python", 123 , ".io"] print(len(ls)) s = "python123.io" print(max(s))
元组类型及操作
定义
- 元组是一种序列类型,一旦创建就不能被修改
- 使用小括号()或tuple()创建,元素间用逗号,分隔
操作
元组继承了序列类型的全部通用操作
creature = "cat","dog","tiger","human" print(creature[::-1]) color = (0x001100, "blue", creature) print(color[-1][2])
列表类型及操作
定义
创建后可以修改
使用方括号[]或list()创建,元素间用逗号,分隔
列表各元素类型可以不同,无长度限制
ls = ["cat","dog","tiger",1024] print(ls) #赋值仅传递引用 lt = ls print(lt)
函数或方法 | 描述 |
ls[i] = x |
替换列表ls第i元素为x |
ls[i:j:k] = lt | 用列表lt替换ls切片后所对应元素子列表 |
del ls[i] | 删除列表ls中第i元素 |
del ls[i:j:k] | 删除列表ls中第i到第j以k为步长的元素 |
ls += lt | 更新列表ls,将列表lt元素增加到列表ls中 |
ls *= n | 更新列表ls,其元素重复n次 |
ls.append(x) | 在列表ls最后增加一个元素x |
ls.clear() | 删除列表ls中所有元素 |
ls.copy() | 生成一个新列表,赋值ls中所有元素 |
ls.insert(i,x) | 在列表ls的第i位置增加元素x |
ls.pop(i) | 将列表ls中第i位置元素取出并删除该元素 |
ls.remove(x) | 将列表ls中出现的第一个元素x删除 |
ls.reverse() | 将列表ls中的元素反转 |
ls = ["cat","dog","tiger",1024] ls[1:2] = [1,2,3,4] del ls[::3] ls*2 ls.append(1234) ls.insert(3, "human") ls.reverse()
应用场景
如果不希望数据被程序所改变,转换成元组类型
实例:

#CalStatisticsV1.py def getNum(): #获取用户不定长度的输入 nums = [] iNumStr = input("请输入数字(回车退出): ") while iNumStr != "": nums.append(eval(iNumStr)) iNumStr = input("请输入数字(回车退出): ") return nums def mean(numbers): #计算平均值 s = 0.0 for num in numbers: s = s + num return s / len(numbers) def dev(numbers, mean): #计算方差 sdev = 0.0 for num in numbers: sdev = sdev + (num - mean)**2 return pow(sdev / (len(numbers)-1), 0.5) def median(numbers): #计算中位数 sorted(numbers) size = len(numbers) if size % 2 == 0: med = (numbers[size//2-1] + numbers[size//2])/2 else: med = numbers[size//2] return med n = getNum() #主体函数 m = mean(n) print("平均值:{},方差:{:.2},中位数:{}.".format(m, dev(n,m),median(n)))
字典
定义
映射是一种键(索引)和值(数据)的对应
字典为映射的体现,是键值对的集合,键值对之间无序
采用大括号{}和dict()创建,键值对用冒号:表示
处理函数及方法
函数或方法 | 描述 |
del d[k] | 删除字典d中键k对应的数据值 |
k in d | 判断键k是否在字典d中,如果在返回True,否则False |
d.keys() | 返回字典d中所有的键信息 |
d.values() | 返回字典d中所有的值信息 |
d.items() | 返回字典d中所有的键值对信息 |
d.get(k,<default>) | 键k存在,则取出相应值,不在则返回<default>值 |
d.pop(k,<default>) | 键k存在,则取出相应值,不在则返回<default>值 |
d.popitem() | 随机从字典d中取出一个键值对,以元组形式返回 |
d.clear() | 删除所有的键值对 |
len(d) | 返回字典d中元素的个数 |
d = {"中国":"北京","美国":"华盛顿","法国":"巴黎"} "中国" in d d.keys() d.values() d.get("中国","伊斯兰堡") d.get("秦国","神国") d.popitem()
应用场景
统计
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通