python周报第三周

1.set 集合

1.set 方法解析

1.定义一个set

s1 = "caesary"
set1 = set(s1)
print(set1)
l1 = [1,2,3,4]
set2 = set(l1)
print(set2)
t1 = (1,1,1,2,3)
set3 = set(t1)
print(set3)

执行结果如下

{‘y‘, ‘e‘, ‘s‘, ‘r‘, ‘c‘, ‘a‘}
{1, 2, 3, 4}
{1, 2, 3}

总结:set集合有去重功能,类似awk数组;并且是无序的,类似字典。

2.add()

print(set1)
set1.add("x")
print(set1)

执行结果如下

{‘e‘, ‘a‘, ‘s‘, ‘c‘, ‘r‘, ‘y‘}
{‘e‘, ‘a‘, ‘s‘, ‘c‘, ‘r‘, ‘x‘, ‘y‘}

总结:add()方法可以在集合中添加一个元素。

3.clear()

print(set1)
set1.clear()
print(set1)

执行结果如下

{‘s‘, ‘a‘, ‘r‘, ‘c‘, ‘e‘, ‘y‘}
set()

总结:clear()方法可以清空一个集合。

4.copy()

print(set1)
set4 = set1.copy()
print(set1,set4)

执行结果如下

{‘s‘, ‘a‘, ‘y‘, ‘c‘, ‘r‘, ‘e‘}
{‘s‘, ‘a‘, ‘y‘, ‘c‘, ‘r‘, ‘e‘} {‘c‘, ‘r‘, ‘e‘, ‘s‘, ‘a‘, ‘y‘}

总结:copy()可以浅拷贝一个集合。

5.difference()、difference_update()

print(set2,set3)
set5 = set2.difference(set3)
print(set5,set2)
set3.difference_update(set2)
print(set2,set3)

执行结果如下

{1, 2, 3, 4} {1, 2, 3, 5}
{4} {1, 2, 3, 4}
{1, 2, 3, 4} {5}

总结:difference()方法,是从本集合中删除和参数集合共同的元素并赋给一个集合,本集合和参数集合不变。difference_update()方法,是从本集合中删除和参数集合共同的元素,作用在本集合上。

6.discard()、remove()

共同点:

print(set3)
set3.discard(2)
print(set3)
set3.remove(1)
print(set3)

执行结果如下

{1, 2, 3, 5}
{1, 3, 5}
{3, 5}

不同点:

t1 = (1,1,1,2,3,5)
set3 = set(t1)

print(set3)
set3.discard(6)
print(set3)
set.remove(6)
print(set3)

执行结果如下

Traceback (most recent call last):
  File "/Users/liukai/PycharmProjects/s13/day3/blog.py", line 49, in <module>
    set.remove(6)
TypeError: descriptor ‘remove‘ requires a ‘set‘ object but received a ‘int‘
{1, 2, 3, 5}
{1, 2, 3, 5}

总结:discard()、remove()方法都是删除一个元素,不同的是,discard()是有则删除,无则pass,而remove()方法是有则删除,无则异常,强烈建议使用discard()

7.intersection()、intersection_update()

print(set2,set3)
set7 = set2.intersection(set3)
print(set7)

执行结果如下

{1, 2, 3, 4} {1, 2, 3, 5}
{1, 2, 3}

总结:intersection()方法,返回一个本集合和参数集合的交集集合。

print(set2,set3)
set2.intersection_update(set3)
print(set2)

执行结果如下

{0, 1, 2, 3, 4} {1, 2, 3, 5}
{1, 2, 3}

总结:intersection_update()方法,返回一个本集合和参数集合的交集集合,作用于本集合。

8.update()

print(set2)
set2.update({0,0,0,9})
print(set2)

执行结果如下

{1, 2, 3}
{0, 1, 2, 3, 9}

总结:update()方法直接更新一个集合到本集合并去重。

2.set应用举例分析

有两个字典,需要把新字典更新到老字典:

old_dict = {
    "#1":8,
    "#2":4,
    "#4":2,
}

new_dict = {
    "#1":4,
    "#2":4,
    "#3":2,
}

解题思路:

1.需要求出老字典需要删除的条目。

2.需要求出新字典需要新增到老字典的条目。

3.需要求出新字典需要更新到老字典的条目。

解题方法:

###set(),把老字典的key转化成一个集合
old_key_set = set(old_dict.keys())
###set(),把新字典的key转化成一个集合
new_key_set = set(new_dict.keys())
###定义一个需要删除的集合,set的difference()求出在老字典的key而不在新字典的key的集合
remove_set = old_key_set.difference(new_key_set)
###删除老字典的条目
del old_dict["".join(list(remove_set))]
###定义一个需要新增的集合
update_set = new_key_set.difference(old_key_set)
###新增新字典的条目
old_dict["".join(list(update_set))] = new_dict["".join(list(update_set))]
###查找需要更新的key,我采取的方法是遍历两个字典
for i in old_dict:
    for j in new_dict:
        if i == j and old_dict[i] != new_dict[j]:
            old_dict[i] = new_dict[j]
print(old_dict)

结果:

{‘#1‘: 4, ‘#2‘: 4, ‘#3‘: 2}
时间: 2024-10-29 14:17:02

python周报第三周的相关文章

python课程第三周 内置数据结构——字典

字典,Python中的无序集合,key-value结构,通过键来访问对应的值,而不是依靠偏移或者索引来访问值.下面是字典的一些基本属性: 字典的value可以是任意值,例如数字.字符串.列表.元组,甚至是字典本身 字典的key必须是可hash的值 字典的key是唯一的 字典没有切片操作,只能通过key来访问value 字典内的元素都是无序存储的 可变长度.异构.任意嵌套 对象引用表:采用最优化的散列算法来查找键,因此键搜索速度非常快,字典存储的是对象引用(而不是拷贝). 字典的初始化: d=di

python学习第三周(下 函数)

本节内容 1. 函数基本语法及特性 2. 参数与局部变量 3. 返回值  嵌套函数 4.递归 5.匿名函数 6.函数式编程介绍 7.高阶函数 8.内置函数 温故知新 1. 集合 主要作用: 去重 关系测试, 交集\差集\并集\反向(对称)差集 2. 元组 只读列表,只有count, index 2 个方法 作用:如果一些数据不想被人修改, 可以存成元组,比如身份证列表 3. 字典 key-value对 特性: 无顺序 去重 查询速度快,比列表快多了 比list占用内存多 为什么会查询速度会快呢?

python周报第六周

1.初识算法 1.冒泡排序 冒泡排序算法的原理如下:(从后往前) 1.比较相邻的元素.如果第一个比第二个大,就交换他们两个. 2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.在这一点,最后的元素应该会是最大的数. 3.针对所有的元素重复以上的步骤,除了最后一个. 4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较. 冒泡算法初级代码如下: 1 ##冒泡 2 a=[9,2,1,55,33] 3 4 for i in range(len(a)): 5 for j

python学习第三周总结

一.Python中的set集合 1.set概念 set是可变的.无序的.不重复的元素集合.set的元素及元素里面的元素不能出现不可哈希类型.(即set的元素要求必须可以hash) 常用的不可hash类型有list.set.bytearray set的元素不可索引,但可以迭代 2.set定义 例如: s1 = set() 例如: s2 = set(range(5)) 例如: s3 = {‘a’,2,2,3,‘abc’} 等价于set = {‘a’,2,3,‘abc’}.set里面的元素不能重复.

python周报第七周

1.模块进阶 1. configparser [email protected]:~/PycharmProjects/s13/day7$ cat testfile [info1] name = liukai age1 = 19 [info2] name = lk age1 = 22

python周报第五周

1.装饰器进阶 -- 双层装饰器 先直接上代码,咱们在来分析. 1 USER_INFO = {} 2 3 def check_login(func): 4 def inner(*args,**kwargs): 5 if USER_INFO.get("is_login",None): 6 ret = func(*args,**kwargs) 7 return ret 8 else: 9 print("请登录") 10 return inner 11 12 13 def

马哥2016全新Linux+Python高端运维班第三周作业作答

                    马哥2016全新Linux+Python高端运维班第三周作业                                           1.列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可.     [[email protected] ~]# who | awk '{print $1 $NF}'| uniq -d     [[email protected] ~]# who     yicx     :0  

Coursera系列-R Programming第三周-词法作用域

完成R Programming第三周 这周作业有点绕,更多地是通过一个缓存逆矩阵的案例,向我们示范[词法作用域 Lexical Scopping]的功效.但是作业里给出的函数有点绕口,花费了我们蛮多心思. Lexical Scopping: The value of free variables are searched for in the environment where the function was defined. 因此 make.power<-function(n){ pow<

杨其菊201771010134《面向对象程序设计(Java)》第三周学习总结

<面向对象程序设计(Java)>第三周学习总结 第一部分:理论知识 这周课程没有新进度,由于感觉对基础语法的不熟悉,复习了一遍前三章的细碎知识,学到一些之前不知道的原理: 1.计算机高级语言按程序的方式可以分为两种:编译型和解释型 编译型:C,C++,Objective-C,Pascal等: 解释型:Ruby,Python, 半编译型:Visual Basic, java:既是编译型语言又是解释型语言. 2.classpath 环境变量的设置:如果使用1.5以上的版本,完全可以不用设置这个环境