Python中非可变类型的数据集合

描述

  • 元组简单介绍 
  • 元组与序列基本操作
  • 集合的简单介绍
  • 集合的基本操作

重点

  1. 理解元组与列表的差别
  2. 了解序列及其常用类型
  3. 掌握集合的特性与常用函数

元组(Tuple)

  • 元组(Tuple)是”不可变”的列表(List)
  • 元组使用小括号,列表使用方括号
    • tup1 = (‘physics’, ‘chemistry’, 1997, 2000)
t1 = 'a','b','c',1,2,3 # 也是创建一个元组
t2 = ('a','b','c',1,2,3)
print(t1)
print(t2)
print(type(t1))
print(type(t2))
# 执行以上程序的结果:
('a', 'b', 'c', 1, 2, 3)
('a', 'b', 'c', 1, 2, 3)
<class 'tuple'>
<class 'tuple'>

元组的读与写

  • 元组的读取方式与列表相同
t = ('a', 'b', 'c', 1, 2, 3)
print(t[5])  # 正序索引,获取第6个元素
print(t[-1])  # 倒序索引
print(t[1:4])  # 范围取值
print('b' in t)  # 成员运算符
# 执行以上程序的结果:
3
3
('b', 'c', 1)
True
  • 元组的元素在创建后不允许修改
# 如果元组内持有列表,那么列表的内容是允许被修改的
t2 = (['张三', 38, 5000], ['李四', 28, 2000])
item = t2[0]
print(item)
item[1] = 40
print(t2)
# 执行以上程序的结果:
['张三', 38, 5000]
(['张三', 40, 5000], ['李四', 28, 2000])
  • 元组允许使用”元组运算符”来创建新元组
t1 = (a, b, c) + (1, 2, 3)
t2 = ('see', 'you')*2
t3 = (10,) * 5 # 如果元组只有一个元素时,必须在这个元素后增加逗号说明这是一个元组
print(t1)
print(t2)
print(t3)
#执行结果
('a', 'b', 'c', 1, 2, 3)
('see', 'you', 'see', 'you')
(10, 10, 10, 10, 10)

列表与元组的区别与应用场景

列表 元组
内容允许扩展 内容不可变
内存存储动态变化 创建后固定不变
效率较低 效率最高
运行时数据需要变更时使用 用于保存稳定不变的数据
保存天气数据、股市数据 保存国家名、元素周期表

 

序列

认识”序列”

  1. 序列(Sequence)是指”有序”的队列
  2. 序列中的元素顺序按添加顺序排列
  3. 序列中的数据通过”索引”进行获取

 

序列包含常用数据结构

  • 字符串(Str)

 

  • 列表(List)

 

  • 元组(Tuple)

 

  • 数字序列(Range)

range 用于表示数字序列,内容不可变

数字序列使用range()函数创建

语法: r = range(0,100) #产生0-99数字序列

成员运算符适用 “in” “not in”所有序列数据结构通用

数字序列 -- 使用 range() 函数创建,内容不可变
1. 基本创建
语法:r = range(起始值, 结束值) 左闭右开
2. 增加步长
语法:r = range(起始值, 结束值, 步长) 步长代表数字之间的间隔
# 创建数字序列
r1 = range(10, 20)  # 10-19的整数,左闭右开
print(r1)
print(type(r1))
print(r1[9])
print(r1[3:5])

# 增加步长
r2 = range(10, 20, 2)
print(r2)  # 序列里有:10,12,14,16,18
print(r2[4])
print(r2[0:2])
#r2[4] = 20

#成员运算符in,序列数据结构中通用
print(12 in range(10,20))
print(22 not in range(10,20))

执行以上程序的结果:

range(10, 20)
<class 'range'>
19
range(13, 15)
range(10, 20, 2)
18
range(10, 14, 2)
True
True

数字序列经典案例

数字序列经典案例:
1、通过range遍历其他序列
#利用range遍历其他序列
c = 'abcdefg'
for i in range(0,len(c)):
    letter = c[i]
    print(letter)
2、科学运算(质数,斐波那契数列...)
#斐波那契数列
#后一个是前两个之和1,1,2,3,5,8,13,。。。。
result = []
for i in range(0,50):
    if i == 1 or i == 0:
        result.append(1)
    else:
        result.append(result[i-2] + result[i-1])
print(result)

# 判断质数
l = 776351721
is_prime = True
for i in range(2,l):
    if l % i == 0:
        print(i)
        is_prime = False
        break
if is_prime == True:
    print("{0}是质数".format(l))
else:
    print("{0}不是质数".format(l))

序列类型的互相转换

1. list() - 转换为列表
语法:list(其他序列类型变量名)

2. tuple() - 转换为元组
语法:tuple(其他序列类型变量名)
# 带分隔符的字符串无法直接转换成元组,但是可以先转换成列表再转换成元组
如:s2 = 'abc,123'
print(tuple(s2.split(",")))

3. join()、str() - 转换为字符串
# join必须要求所有元素都是字符串
# str函数用于将单个数据转为字符串,join对列表进行连接
例:l1 = ['a' , 'b' , 'c']
print(",".join(l1))# join前面这个双引号内的内容代表输出时的分隔符

r1 = range(1 , 4)
s3 = "" # 将包含数字的序列输出
for i in r1:
    s3 += str(i)
print(s3)
# 如果想把数字序列range()用join()转换成字符串,可以先用for循环遍历生成一个字符串,再用join()
# 序列类型间的互相转换
l1 = ['a', 'b', 'c']
t1 = ('d', 'e', 'f')
s1 = 'abc123'
s2 = 'abc,123'
r1 = range(1, 40)
# list() - 转换为列表
l2 = list(t1)
print(l2)
print(list(s1))
print(s2.split(","))
print(list(r1))

# tuple() - 转换为元组
print(tuple(l1))
print(tuple(s1))
print(tuple(s2.split(",")))
print(tuple(r1))

# str函数用于将单个数据转为字符串 join对列表进行连接
print(str(l1))
print(",".join(l1))
print("|".join(t1)) #join必须要求所有元素都是字符串
s3 = "" #将包含数字的序列输出
for i in r1:
    s3 += str(i)
print(s3)

 

集合

什么是集合?

  • 集合(Set)是Python中的内置数据结构
  • 集合可被看做是”没有Value的字典”
    • {‘张三’,’李四’,’王五’,’赵六’,’宋七’,’杨八’} 都看成是集合的键

集合的特点:

1、集合元素是无序的

2、集合元素不能重复

3、集合是可变的

4、集合允许数学运算(交集、并集、差集)

5、集合是分散存储的 集合存储原理: 集合数据通过hash函数生成对应的散列值,散列值与内存的某一个地址对应,与字典相似的是,一整块内存都是为一个集合开辟的,数据不是连续的存储,无序存放的,分散存储,中间会留下空余的空间,如果集合不在有新的元素产生,空间是浪费的。


集合的创建方法:

# 集合的创建
college1 = {"哲学" , "经济学" , "法学" , "教育学"}
print(college1)
# 输出后可以发现原来的顺序被打乱了,
# 原因是集合的存储时通过hash值在内存中存放的,
# 每一次运行后hash值都会改变所以每次的存放位置都会不同

# set()内置函数从其他数据结构转换
college2 = set(["金融学" , "哲学" , "经济学" , "历史学" , "文学"])# 将列表转为集合
print(college2)

# 用set创建字符串集合
college3 = set("一生一世")
print(college3)

# 空集合的创建
college4 = set()
print(type(college4))

 

集合中的数学运算

set1 , set2
交集 获取两个集合中重复部分,新建一个集合
c3 = set1.intersection(set2)
把交集赋值给set1,更新原有集合
set1.intersection_update(set2)

并集,将两个集合所有元素合并,去重。
c4 = set1.union(set2)

差集:两个集合之间差异的部分
c5=set1.difference(set2) #表示a在b中不存在的部分,单向差集
# symmetric_difference 代表双向差集
set1.difference_update(set2) #对set1进行更新操作
set1.symmetric_difference_update(set2) #对set1进行更新操作
交并差 为独有的数学运算

集合间的关系操作:

1."=="判断两个集合的元素是否完全相同,返回布尔值
语法:集合变量名1 == 集合变量名2

2.判断set1是否是set2的"子集" # 返回布尔值
语法:set1.issubset(set2)

3.判断是否为“父集”(即判断set1是否包含set2)# 返回布尔值
语法:set1.issuperset(set2)

4.判断两个集合是否存在重复元素(不同于上节课的intersection取交集方法)# 返回布尔值
语法:set1.isdisjoint(set2) # 不存在重复返回True,存在重复返回False

集合的增删改查(类似于列表)

# 1.集合的遍历
college1 = {"哲学" , "经济学" , "法学" , "教育学"}
for c in college1:
print(c)

# 判断元素是否存在集合中
print("哲学" in college1)
print("计算机学" in college1)

# 集合不支持按索引提取数据
# print(college1[1])

# 新增数据:add()函数 ,一次只能添加一个元素,同样是有则不动,无则添加
college1.add('计算机学')
college1.add("法学")
print(college1)

# update方法来一次添加多个元素,update的参数是一个列表或者元组
college1.update(["生物学" , "工程学"])
print(college1)

# 集合不支持更新,需要先删除原有元素,再创建新元素
# remove如果删除不存在的元素时,会报错
# 例:college1.remove("生物")
# discard如果遇到不存在的元素时,则会忽略删除操作
college1.discard("生物")
college1.add("医学")
print(college1)

三种内置生成式:

1、列表生成式
2、字典生成式
3、集合生成式
语法:[被追加的数据 循环体 循环或判断语句] 或 {}
lst1 = []
for i in range(10,20):
    lst1.append(i*10)
#列表生成式
lst2 = [ i * 10 for i in range(10,20)]
lst3 = [i * 10 for i in range(10,20) if i % 2 ==0]
print(lst3)
#相当于
for i in range(10,20):
    if i % 2 == 0:
        lst3.append(i * 10)
print(lst3)
lst4 = [i * j for i in range(1,5) for j in range(1,5)]
print(lst4)
#相当于
lst5 = []
for i in range(1,5):
    for j in range(1,5):
        lst5.append(i * j)
print(lst5)
#字典生成式
lst6 = ['张三','李四','王五']
dict1 = {i+1:lst6[i] for i in range(0,len(lst6))}
print(dict1)
#相当于
for i in range(0,len(lst6)):
    dict1[i+1] = lst6[i]
#集合生成式
set1 = {i * j for i in range(1,4) for j in range(1,4) if i == j}
print(set1)
#相当于
for i in range(1,4):
    for j in range(1,4):
        if i == j:
            set1.add(i * j)
print(set1)

=

Python3

Python中可变类型的数据集合

2019-10-24 23:12:47

Python3

利用Python3 将MP3转换为WAV

2019-11-4 4:04:01

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索