2021-04-09 第一阶段day7

一、容器5——集合set

1、定义

对比字典:由一系列键值对组成的可变散列容器
集合:由一系列不重复的不可变类型变量(元组/数/字符串)组成的可变散列容器。
加粗的位置相当于
,也就是说,集合是由一系列键组成的可变散列容器。

2、集合的创建

(1)语法1:集合名={元素1,元素2}

dict01 = {"a": "b", "A": "B"} # 在内存中是无序的 但输出有序
set01 = {"a", "A"}  # 在内存中是无序的 输出也无序

(2)语法2:集合名= set(可迭代对象)

list01 = ["zx", "as", "qw", "zx", "as"]
set02 = set(list01)
print(set02)  # {'qw', 'zx', 'as'}

1、由此demo可看出,集合可用于去重
2、创建空集合只能用第二种方法set03 = set(),第一种方法只能创建出字典。

3、集合元素的添加

集合名.add(元素) (无序)

set02.add("zhao")
set02.add("zx")
print(set02) # {'qw', 'zx', 'zhao', 'as'}

4、集合的遍历

由于集合不可定位,所以只有一种方法:

for item in set02:
    print(item)

5、集合元素的删除

(1)语法1:集合名.remove(“key”)

set02.remove("zx")
print(set02) # 如果不存在会报错,所以可以用ifin判断再执行

(2)语法2:集合名.discard(“key”)

set02.discard("tex")
print(set02)  # 如果不存在也不会报错

6、集合的应用

(1)去重

(2)数学运算

set01 = {1, 2, 3}
set02 = {2, 3, 4}

1、交集 &

set03 = set01 & set02
print(set03) # {2, 3}

2、并集 |

set04 = set01 | set02
print(set04) # {1, 2, 3, 4}

3、补集
(1)-

set05 = set01 - set02
print(set05) # {1}
set06 = set02 - set01
print(set06) # {4}

(2)对称补 ^

set07 = set01 ^ set02  
print(set07)  # {1, 4}

4、子集、超集

set08 = {2,3}
print(set08 < set01)
print(set08 > set01)
# 被包含的是子集 包含别人的是超集

7、集合推导式

list01 = ["zx", "as", "qaw", "zx", "asq"]
set_result = set()
# 将列表中姓名字数为2的存入集合
for i in list01:
    if len(i)>2:
        set_result.add(i)

简化后:

set_result2 = {i for i in list01 if len(i)>2}

———————————————————————————

二、容器小结

1、种类与特点

存什么可变/不可变序列/散列
字符串字符的编码值不可变序列
列表变量可变序列
元组变量不可变序列
字典键值对可变散列
集合可变散列

2、可变与不可变

数据内存分布特征优点缺点
可变列表、字典、集合预留空间+自动扩容操作方便占内存
不可变字符串、元组、整型、浮点型、布尔型按需分配省内存操作不方便

3、序列与散列

特点优点
序列有顺序,空间连续省内存,操作方便(索引切片)
散列没顺序,空间分散速度快(哈希算法定位)

———————————————————————————

三、for循环嵌套

# 外层执行一次,内层执行多次
for r in range(3):  # 列
    for c in range(5):  # 行
        print("$", end="")
    print()

四、自定义排序算法(重要!!!)

我们目前已经学了三种算法:
(1)变量交换
(2)计算最值
(3)累计运算
接下来的排序算法结合了(1)和(2)

基本操作:
1、让第一个元素是最大(小)值
2、让第二个元素是剩下的最大(小)值
3、让第三个元素是剩下的最大(小)值

将下列的列表按降序排列

list01 = [23,14,52,516,314,152]

第一步:

for i in range(1,len(list01)):
    if list01[0] < list01[i]:
        list01[0], list01[i] = list01[i] , list01[0]
print(list01)

第二步:

for i in range(2,len(list01)):
    if list01[1] < list01[i]:
        list01[1], list01[i] = list01[i], list01[1]
print(list01)

第三步同理。
由此可见,我们可以在外部再嵌套一层循环来执行。

# 取数据
for j in range(len(list01)-1):
    # 作比较
    for i in range(j+1, len(list01)):
        # 找更大
        if list01[j] < list01[i]:
            # 则交换
            list01[j], list01[i] = list01[i], list01[j]
print(list01)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值