【Python基础学习记录5】元组与集合

一、元组和集合

1、元组的读写操作

1.1 元组(Tuple

1元组是不可变的列表

2)元组使用小括号,列表使用方括号

如:tup1 = (''physics,'chemistry',1997,2000)

2.2元组的读写

1)元组的读取方式与列表相同

① 创建元组:

t = 'a','b','c',1,2,3     (元组也可以不适用小括号括住元素)

t = ('a','b','c',1,2,3)

注意:如果元组只有一个元素时,必须在这个元素后增加逗号说明这是一个元组:t4 = ('see',)

② 获取数据,在获取数据时与列表完全相同
print(t[5]) #正序索引,获取第6个元素
print(t[-1]) #倒序索引
print(t[1:4]) #范围取值
print('b' in t ) #成员运算符

2)元组的元素在创建后不允许修改写入数据的函数同样不支持

注意:

如果元组内持有列表,那么列表的内容是允许被修改的

3元组允许使用元组运算符来创建新元组

元组运算符同样适用于列表

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

列表

元组

内容允许扩展

内容不可变

内存存储动态变化

创建后固定不变

效率较低

效率较高

运行时数据需要变更时使用

用于保存稳定不变的数据

保存天气数据,股市数据

保存国家名,元素周期表      

列表使用方括号,list=[a,b,1]

元组使用小括号,tuple=(a,b,1)

3、认识“序列”

3.1 “序列”的特点

1)序列是有序的

2)序列中的元素顺序按添加顺序排列

3)序列中的数据通过索引进行获取

 

3.2 序列包含常用数据结构

1)字符str

2列表 list

3元组 tuple

4数字序列 range

 

3.3 数字序列

1range用于表示数字序列,内容不可变(一旦创建不可改变)

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

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

① print(range(10, 20))

输出还是以range(起始数据,结束数据),节约存储空间类型还是range

② 创建数字序列

r1 = range(10,20)

③ 增加步长

r2 = range(10, 20, 2)

④ 成员运算符in是在所有的序列结构数据中通用

3.4 数字序列经典案例

1)通过range遍历其他序列

2)科学运算(质数、斐波拉契数列)

# 利用range遍历其他序列
c = "abcdefg"
for i in range(0, len(c)):
    letter = c[i]
    print(letter)

# 斐波那契数列
# 1,1,2,3,5,8,13,....
result = []
for i in range(0, 50):
    if i == 0 or i == 1:
        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:
        is_prime = False
        break
if is_prime == True:
    print("{}是质数".format(l))
else:
    print("{}不是质数".format(l))

 

3.5 序列类型的互相转换

 

#序列类型间的互相转换

l1 = ["a","b","c"]

t1 = ("d","e","f")

s1 = "abc123"

s2 = "abc,123"

r1 = range(1,20)

#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))

# print(" ".join(r1))#join必须要求所有元素都是字符串

 

#将包含数字序列输出

s3 = ""

for i in r1:

    s3 = s3+str(i)

# print(s3)

print(" ".join(s3))   

 

 

 

4、集合

4.1 什么是集合

集合(Set)是Python中的内置数据结构,集合可被看做是“没有value的字典”

1)集合元素是无序的

2)集合元素不能重复

3)集合是可变的

4)集合允许数学运算

5)集合是分散存储的

4.2 集合存储原理

集合中的元素会转换为哈希值缺点: 占空间

4.3 集合的创建
1使用{}符号创建集合

college1 = {"哲学","经济学","法学","教育学"}

print(college1)

#输出没有按照定义的集合显示

#每次运行显示的集合中的顺序不一样,因为生成的哈希散列值不一样,导致存储的顺序不一样

2使用set()函数创建集合set()内置函数从其他数据结构转换set1 = set(其他数据结构)

college2 = set(["金融学","哲学","经济学","历史学","文学"])

print(college2)

3使用set创建字符串集合

college3 = set("我爱中国")

print(college3)

3空集合set1 = set()

注:set1 = {}创建的是空字典       

4.4 集合的数学运算

先定义两个集合:set1和 set2


1交集

获取两个集合中重复部分,新建一个集合
c3 = set1.intersection(set2)  


更新原有集合:把交集赋值给set1
set1.intersection_update(set2)  


2并集
将两个集合元素合并,去重:c4 = set1.union(set2)
Python中没有并集的更新函数update
3差集

c5 = set1.difference(set2)  #表示set1在set2中不存在的部分
c6 = set1.symmetric_difference(set2)  #symmetric_difference表示双向差集。既包含了set1在set2中没有出现的元素,也包含了set2在set1中没有出现的元素。
set1.difference_update(set2)  #对set1进行更新操作
set1.symmetric_difference_update(set2)  #对set1进行更新操作

 

4.5 集合间的关系操作

 

s1 = {1, 2, 3, 4, 5, 6}

s2 = {6, 5, 4, 3, 2, 1}

# == 判断两个集合的元素是否完全相同

print(s1 == s2)

 

s3 = {4, 5, 6, 7}

s4 = {1, 2, 3, 4, 5, 7, 6, 8}

# issubset判断是否为"子集"

print(s3.issubset(s4))#s3是否为s4的子集

# issuperset判断是否为"父集"

print(s4.issuperset(s3))#s4是否为s3的父集

 

s5 = {6}

s6 = {1, 3, 5, 7, 9}

#isdisjoint 函数判断两个集合是否存在重复元素

#True 代表不存在重复元素,False则代表存在重复

print(s5.isdisjoint(s6))       

 

 

 

4.6 操作集合元素

1集合的遍历

college1 = {"哲学", "经济学", "法学" , "教育学"}

for c in college1:

    print(c)

 

2判断元素存在

print("哲学" in college1)

print("计算机学" in college1)

 

3集合不支持按索引提取数据

print(college1[3]) #会报错

 

4新增数据,一次只能添加一个元素

college1.add("计算机学")

college1.add("法学")

print(college1)

 

5update方法一次添加多个元素

college1.update(["生物学" , "工程学"])  #列表也能改成元组

print(college1)

 

6)更新集合中的元素是要删除原有元素,再创建新元素(removediscard,再add

删除元素操作:

remove如果删除不存在的元素时,会报错

discard如果遇到不存在的元素时,则会忽略删除操作

 

7)set.clear():清空set中的所有元素

5、三种生成式

三种内置生成式:列表生成式,字典生成式,集合生成式

生成式是一种往数据结构中添加数据的简化形式

生成式语法:[被追加的数据 循环语句 循环或者判断语句]{被追加的数据 循环语句 循环或者判断语句}

 

1)列表生成式

 

lst1 = []

for i in range(10,20):

    lst1.append(i*10)

print(lst1)

 

lst2 = [i * 10 for i in range(10,20)]

print(lst2)

 

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)

 

for i in range(1,5):

    for j in range(1,5):

        lst4.append(i * j )

 

2)字典生成式

lst5 = ["张三","李四","王五"]

dict1 = {i+1:lst5[i] for i in range(0,len(lst5))}

print(dict1)

 

for i in range(0,len(lst5)):

dict1[i+1] = lst5[i]

print(dict1)

 



3)集合生成式
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)

 

 

 

 

 

 

posted @ 2021-04-24 21:33  钟胜一  阅读(290)  评论(0编辑  收藏  举报