概述
一、 集合
1. 定义
- 集合用 {} 表示,元素间用逗号分隔;
- 集合元素之间 无序 ;
- 每个元素唯一,不存在相同元素。
- 建立集合类型用 {} 或 set() 建立 空集合 类型,必须使用函数 set()。
- 集合元素不可更改,不能是可变数据类型。
- 不可变数据类型包括:整数、浮点数、复数、字符串、元祖等。
>>> A = {'Pyhon',123,('python',123)} #使用{}建立集合
>>> A
{('python', 123), 123, 'Pyhon'}
>>> B=set('pypy123') #只用set()建立集合
>>> B
{'1', 'y', '2', '3', 'p'} #去掉了重复字母
>>> C={'python',123,'python',123}
>>> C
{'python', 123} #去掉了重复数字和字符串
2.集合间的操作:
操作符及应用 | 含义 | 描述 |
---|---|---|
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中的非相同元素 |
>>> A={'p','y',123}
>>> B=set('pypy123')
>>> A-B
{123}
>>> A&B
{'p', 'y'}
>>> A^B
{'3', '2', 123, '1'}
>>> A|B
{'p', '1', '3', '2', 123, 'y'}
>>> B-A
{'2', '3', '1'}
3.常用的十个集合处理方法
操作函数或方法 | 描述 |
---|---|
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不在集合中,返回True,否则返回False |
set(x) | 将其他类型变量x转变为集合类型 |
>>> A={'p','y',123}
>>> for item in A:
print(item,end='')
y123p
>>> A
{'y', 123, 'p'}
例:while…Ture…遍历数据类型,用 A.pop() 取出集合A中的所有元素:
>>> A={'p','y',123}
>>> try:
while True:
print(A.pop(),end='')
except:
pass
123py
>>> A
set()
4.集合类型应用场景
- 关系比较
>>> 'p' in {'p','y',123}
True
>>> {'p','y'} >= {'p','y',123}
False
- 数据去重
>>> ls=['p','p','y','y',123]
>>> s=set(ls) #利用集合无重复元素的特点去重
>>> s
{123, 'p', 'y'}
>>> lt=list(s) #将集合转换回列表
>>> lt
[123, 'p', 'y']
二、 序列
- 序列是具有先后关系的一组元素:
- 序列是一维元素向量,元素类型可以不同;
- 类似数学元素序列;
- 元素间由序号引导,通过下标访问序列的特定元素。
- 序列类型的衍生:字符串类型、元祖类型、列表类型
- 序号的正向递增和反向递减
反向递减序号
-5 | -4 | -3 | -2 | -1 |
---|---|---|---|---|
‘BIT’ | 3.1415 | 1024 | (2,3) | [‘中国’,9] |
0 | 1 | 2 | 3 | 4 |
正向递增序号
操作符及应用 | 描述 |
---|---|
x in s | 如果 x 是序列 s 的元素,返回True,否则返回False |
x not in s | 如果 x 是序列 s 的元素,返回False,否则返回True |
s + t | 连接两个序列 s 和 t |
sn 或 ns | 将序列 s 复制 n 次 |
s[i] | 索引,返回 s 中的第 i 个元素,i 是序列的序号 |
s[i:j] 或 s[i:j:k] | 切片,返回序列 s 中第 i 到 j 以 k 为步长的元素子序列 |
例:
#列表元素取反
>>> ls=['python',123,'.io']
>>> ls[::-1]
['.io', 123, 'python']
#字符串元素取反
>>> s='python123.io'
>>> s[::-1]
'oi.321nohtyp'
操作函数或方法 | 描述 |
---|---|
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']
>>> len(ls)
3
>>> s='python123.io'
>>> max(s)
'y'
三、 元组
元组是序列类型的一种扩展
- 元组是一种序列类型,一旦被创建就 不能被修改;
- 使用小括号 () 或 tuple() 函数创建,元素间用逗号,分隔;
- 使用时,可以使用 或 不适用小括号。
>>> creature='cat','dog','tiger','human'
>>> creature
('cat', 'dog', 'tiger', 'human')
>>> color=(0x001100,'blue',creature)
>>> color
(4352, 'blue', ('cat', 'dog', 'tiger', 'human'))
#color返回的第三个元素,也是一个元祖类型。
- 元组继承了序列类型的全部通用操作。
- 元组因为创建后不能修改,因此没有针对元组类型的特殊操作。
>>> creature='cat','dog','tiger','human'
>>> creature[::-1]
('human', 'tiger', 'dog', 'cat')
>>> color=(0x001100,'blue',creature)
>>> color[-1][2]
'tiger'
#[-1]索引到元组creature,[2]继续索引到creature中的元素'tiger'
四、列表
- 列表是一种序列类型,创建后可以随意被修改;
- 使用 [] 或 list() 创建,元素间用逗号,分隔;
- 列表中各元素类型可以不同,无长度限制。
>>> ls =['cat','dog','tiger',1024]
>>> ls
['cat', 'dog', 'tiger', 1024]
>>> lt=ls
>>> lt
['cat', 'dog', 'tiger', 1024]
#此处并未真正创建新的列表,而是将ls 和 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 =['cat','dog','tiger',1024]
>>> ls[1:2]=[1,2,3,4]
>>> ls
['cat', 1, 2, 3, 4, 'tiger', 1024]
>>> del ls[::3] #以3位步长,删除列表ls中的元素
>>> ls
[1, 2, 4, 'tiger']
>>> ls*2
[1, 2, 4, 'tiger', 1, 2, 4, 'tiger']
操作函数或方法 | 描述 |
---|---|
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.append(1234)
>>> ls
['cat', 'dog', 'tiger', 1024, 1234]
>>> ls.insert(3,'human')
>>> ls
['cat', 'dog', 'tiger', 'human', 1024, 1234]
>>> ls.reverse()
>>> ls
[1234, 1024, 'human', 'tiger', 'dog', 'cat']
- 列表常用的12个操作:
>>> lt=[] #定义空列表lt
>>> lt += [1,2,3,4,5] #向lt添加5个元素
>>> lt[2]=6
#修改lt中的第2个元素
>>> lt.insert(2,7) #向lt中第2个位置增加一个元素7(调用函数)
>>> del lt[1] #从lt中第1个位置删除一个元素
>>> del lt[1:4]
#删除lt中第1-3位置元素
>>> 0 in lt
#判断lt中是否包含数字0
False
>>> lt.append(0) #向lt新增数字0,append()一次只能增加一个元素(调用函数)
>>> lt.index(0) #返回数字0在lt中的索引位置(调用函数)
2
>>> len(lt) #lt的长度(计算)
3
>>> max(lt) #lt中最大元素(计算)
5
>>> lt.clear() #清空lt(调用函数)
>>> lt
[]
小结:
- 序列是基类类型,扩展类型包括:字符串、元组和列表;
- 元组用 () 和 tuple() 创建,列表用 [ ] 和 list() 创建;
- 元组操作与序列操作基本相同,列表则在序列操作之外,增加了更多灵活处理的函数和方法。
#利用元组序列不可更改的特性,实现 数据保护:
#将列表类型转换成元组类型:
>>> ls =['cat','dog','tiger',1024]
>>> lt=tuple(ls)
>>> lt
('cat', 'dog', 'tiger', 1024)
应用:组合数据计算
计算平均值、方差、中位数:
#CalSatistics.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+=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):
#计算中位数:排序,然后奇数找中间1个,偶数找中间2个取平均
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('平均值:{:.2f},方差:{:.2f},中位数:{:.2f}。'.format(m,dev(n,m),median(n)))
请输入数字(回车退出):5
请输入数字(回车退出):63
请输入数字(回车退出):522
请输入数字(回车退出):58
请输入数字(回车退出):
平均值:162.00,方差:241.43,中位数:292.50。
最后
以上就是明亮未来为你收集整理的Python【组合数据类型1】:集合、序列、元组、列表的全部内容,希望文章能够帮你解决Python【组合数据类型1】:集合、序列、元组、列表所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复