python第四天 组合数据类型 文件与数据格式化

组合数据类型

集合类型

集合与Java中的集合定义相同,都是组合的数据类型,将数据以某种方式进行存储,可以是链表(LinkedList),可以是数组(ArrayList),可以是哈希表(HashMap),可以是堆(PriorityQueue)。

在Python中,集合类型与数学上的集合概念一致,集合元素之间无序,唯一,不可重复并且集合中的元素不能被修改,不能是可变的数据类型!
因为如果集合类型中的数据可以被改变,在定义的时候,集合的元素是:1,2,3,4,5. 没有问题,但是如果把1 改为2 ,那么这个就不是一个集合了!

不可变数据类型:整形,浮点型,复数,字符串,元组等等,都是不可变类型

集合用 {} 表示,元素之间用逗号分隔
建立集合类型用 {} 或者 set()
(使用空集合必须用set())

#("python",123) 是一个元组
#用{}建立集合
A = {
   "python",123,("python",123)}
# A集合的元素,就是 {123,"python",("python",123)}

# 用set() 建立集合
B = set("pytpyt123")
# B 集合的元素,是 “p”,1,“y”,3,“t”,2,
#因为字符串中pty 都是重复的,所以会直接去重,与Java中的HashSet是一样的,并且无序
#其实使用括号,也会有去重的效果

集合特性:用{} 或者set 去定义,元素用 , 分隔;唯一,无序,不可改变

集合之间的运算

交 并 差 补 这四种运算是集合中一定有的
在这里插入图片描述

A = {
   1,2,3,4}
B = {
   2,3,5,"a","b"}

#并集
print(A|B)
# 包含在A ,但不包含在B 的差集
print(A-B)
# 交集
print(A&B)
# 返回A 和 B 中不相同的元素
print(A^B)
# 返回True / False 判断A 和 B 的子集关系

S = {
   1,2,3}
T={
   1,2}
print(S <= T)
print(S < T)
# 判断A 和 B 的包含关系
print(S >= T)
print(S > T)

结果:
在这里插入图片描述

增强操作符

除了交集 并集的操作,还有四种增强操作符,来更新集合
在这里插入图片描述

C = {
   1,2,3,4,6}
D = {
   2,3,7,8}
C |= D
print(C)
#结果: 1, 2, 3, 4, 6, 7, 8

集合的十大方法

S.add(x) :向集合S 中添加 x 元素

S.discard(x) :删除集合S 中 x 元素,如果x 不存在,不会报错

S.remove(x) :删除S集合中的 x 元素,如果x不存在,产生 keyError 的异常

S.clear() : 清空集合S

S.pop():随机拿出一个元素,并且更新集合,将此元素删除,如果S集合为空,就会产生KeyError异常

S.copy() :返回S 的一个副本

len(S) : 返回集合S 的个数

x in S : 判断 x 是否在S 中,如果在返回True,否则返回False

x not in S : 判断 x 不在S 中, 如果不在,那么返回True,否则返回False

set(x) : 将 x 转为集合类型

遍历集合元素

for item in A:
	print(item,end=",")

应用场景

1.包含关系的比较
判断一个数据是否在整个集合中,或者一组数组是否在一个集合中。

#1.判断单个元素
"p" in {
   "p","y",123}
#结果True

#2.判断一组数据
# >=  前一个集合是否包含 后一个集合
{
   "p","y"} >= {
   "p","y",123}
#结果 False

2.数据去重
相信学过Java的一定有整个印象,如果要对一个集合进行去重,直接放到HashSet中就行了 。
而python的集合本身就具备整个特性,所以如果我们有一组数据,要进行去重,直接使用 set()函数,将它转为集合就可以了。

#定义一个列表,有重复的数据
a = [1,2,3,4,4,4,4,5,3]
A = set(a)
print(A)
#结果:{1,2,3,4,5}
# 如果还想将它以列表的方式去操作
#使用list() 即可
IS = list(A)
print(IS)
#结果: [1,2,3,4,5]

序列类型及操作

序列类型的定义

序列:具有一定先后关系的一组元素

可以理解为序列是一维元素向量,元素类型可以不同(可以对应Java中的ArrayList,但是序列类型的底层不是数组,后续的高级学习中,我会尽量的去找python关于解释器层面的知识,理解并学习)

序列是一个基类类型,也就是基本数据类型。但是一般使用的时候并不会使用序列类型,而是使用衍生的类型,字符串类型,元组类型,列表类型。
这三个类型都是序列类型的衍生,序列操作的对于这三个都是适用的,我们可以这样理解,序列类型,相当于一个父接口,而字符串,元组,列表,都是它的具体实现子类,子类总是比父类更强大的,所以也具备自己独特的操作。

序列类型的典型操作,索引,正向与反向的索引,对于这三个类型都是通用的。

序列类型的通用操作符

x in s :如果 x 是序列 s 的元素,返回True,否则返回False

x not in s : 如果 x 不是序列 s 的元素,返回False,否则返回True

s + t : 连接两个序列 s 和 t ,返回一个新的序列(s+=t 也可以使用,将s + t 的列表直接返回s)

s*n 或者 n*s : 将序列 s 赋值 n 次

s[i]:返回 s列表中 i 号索引的元素

s[i:j] 或者s[i:j:k] :切片,返回s序列中 第 i 到 j 以k为步长的子序列([ i ,j )左闭右开区间 )

另外的取反
ls[::-1] 或者 strs[::-1] 都是对整个序列进行取反

5个序列通用方法:

len(s) :返回序列 s 的长度

min(s) :返回序列 s 中的最小值 ,序列中的元素一定要可比较,否则直接抛出异常

max(s) : 返回序列 s 中的最大值

s.index(x) 或者 s.index(x,i,j) 返回序列 s 从i 开始到 j 位置中,第一次出现元素x 的位置

s.count(x) 返回序列中出现 x 的总次数

元组类型的定义和操作

元组是序列类型的扩展,元组一旦被创建则不能被修改。
使用小括号() 或者 tuple() 创建, 元素之间用 逗号 分隔。
可以使用也可以不使用小括号

之前我们返回多组数据,也就是 return x,y 实际上就是返回的一个元组

元组类型的元素可以是元组类型。
例如

crearture = "cat" , "dog" , "tiger" ,"human"
print(creature)
#结果 ( "cat" , "dog" , "tiger" ,"human")

color = (0x001100,"blue",creature)
print(color)
# 结果(4352,“blue”,( "cat" , "dog" , "tiger" ,"human"))

元组类型就是将元素进行简单排列,并且用小括号来组织

列表类型的定义和操作

列表是序列类型的一个扩展,与元组类型非常相似,经常被使用。

使用方括号 【】 或者 list() 来创建,元素间用逗号 分隔。
列表中元素类型可以不想通过,没有长度限制

ls = ["cat","dog",1024]
print(ls)
#结果: ["cat","dog",1024]

lt = ls
print(lt)
#结果: ["cat","dog",1024]

在这里要注意,如果是直接以等号相连的两个列表,实际上是对【“cat”,“dog”,1024】 进行了浅拷贝,也就是现在又另一个引用来引用整个列表,用lt 也能对 ls 进行改变,也就是引用的是同一个内存地址

常用的操作函数和方法

ls[i] = x : 替换列表 ls 第 i 个元素为 x

ls[i:j:k] = it : 用列表lt 替换 ls 切片后所对应元素子列表也就是将ls 先进行切片,把【i,j) 给拿出来,然后重新赋值为 lt

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) : 在列表的最后增加一个元素x

ls.clear() : 将列表清空

ls.copy() : 生成一个新的列表,赋值为ls 的所有元素

ls.insert(i,x) :在列表ls 的第 i 位置增加元素x

ls.pop(i) :取出列表 ls 中的第 i 号下标元素

ls.remove(x) : 将列表ls 中出现的第一个元素 x 删除

ls.reverse() : 将列表中的元素进行反转

序列类型的应用场景

1.数据表示
表示一组有序的数据,进而进行操作,就可以是用列表。
如果作为多个返回值,那么就使用元组。

有了这些表示之后,就很容易的进行遍历。

2.数据保护
如果不希望程序对某些数据进行修改,直接转换为元组类型即可。

ls = ["cat","dog","tiger",1024]
lt = tuple(ls)
print(lt)
#结果 : ("cat","dog","tiger",1024)

如此以来这些元素就变得不可更改了

练习:基本统计值计算

在这里插入图片描述
总个数:len()
求和 for in
平均值,求和 / 平均值
方差:各数据与平均数差的平方的和的平均值
中位数:排序之后,元素个数为奇数,就找最中间,为偶数个,找中间两个取平均

#先获取用户的输入
def getNum():
    nums = []
    iNumstr = i
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值