我是靠谱客的博主 明亮未来,最近开发中收集的这篇文章主要介绍Python【组合数据类型1】:集合、序列、元组、列表,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、 集合

1. 定义

  1. 集合用 {} 表示,元素间用逗号分隔;
  2. 集合元素之间 无序
  3. 每个元素唯一,不存在相同元素。
  4. 建立集合类型用 {}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']

二、 序列

  1. 序列是具有先后关系的一组元素:
  • 序列是一维元素向量,元素类型可以不同
  • 类似数学元素序列;
  • 元素间由序号引导,通过下标访问序列的特定元素。
  1. 序列类型的衍生:字符串类型、元祖类型、列表类型
  2. 序号的正向递增和反向递减

反向递减序号

-5-4-3-2-1
‘BIT’3.14151024(2,3)[‘中国’,9]
01234

正向递增序号

操作符及应用描述
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'

三、 元组

元组是序列类型的一种扩展

  1. 元组是一种序列类型,一旦被创建就 不能被修改
  2. 使用小括号 () 或 tuple() 函数创建,元素间用逗号,分隔;
  3. 使用时,可以使用 或 不适用小括号。
>>> creature='cat','dog','tiger','human'
>>> creature
('cat', 'dog', 'tiger', 'human')
>>> color=(0x001100,'blue',creature)
>>> color
(4352, 'blue', ('cat', 'dog', 'tiger', 'human'))
#color返回的第三个元素,也是一个元祖类型。
  1. 元组继承了序列类型的全部通用操作。
  2. 元组因为创建后不能修改,因此没有针对元组类型的特殊操作。
>>> creature='cat','dog','tiger','human'
>>> creature[::-1]
('human', 'tiger', 'dog', 'cat')
>>> color=(0x001100,'blue',creature)
>>> color[-1][2]
'tiger'
#[-1]索引到元组creature,[2]继续索引到creature中的元素'tiger'

四、列表

  1. 列表是一种序列类型,创建后可以随意被修改;
  2. 使用 [] 或 list() 创建,元素间用逗号,分隔;
  3. 列表中各元素类型可以不同,无长度限制。
>>> 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']
  1. 列表常用的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
[]

小结:

  1. 序列是基类类型,扩展类型包括:字符串、元组和列表;
  2. 元组用 ()tuple() 创建,列表用 [ ]list() 创建;
  3. 元组操作与序列操作基本相同,列表则在序列操作之外,增加了更多灵活处理的函数和方法。

#利用元组序列不可更改的特性,实现 数据保护

#将列表类型转换成元组类型:
>>> 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】:集合、序列、元组、列表所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(58)

评论列表共有 0 条评论

立即
投稿
返回
顶部