初识Python第三天

一.set集合

  set是一个无序且不重复的元素集合

1 print(dir(set))
2
3 #[‘__and__‘, ‘__class__‘, ‘__contains__‘, ‘__delattr__‘, ‘__dir__‘, ‘__doc__‘, ‘__eq__‘, ‘__format__‘, ‘__ge__‘, ‘__getattribute__‘, ‘__gt__‘, ‘__hash__‘, ‘__iand__‘, ‘__init__‘, ‘__init_subclass__‘, ‘__ior__‘, ‘__isub__‘, ‘__iter__‘, ‘__ixor__‘, ‘__le__‘, ‘__len__‘, ‘__lt__‘, ‘__ne__‘, ‘__new__‘, ‘__or__‘, ‘__rand__‘, ‘__reduce__‘, ‘__reduce_ex__‘, ‘__repr__‘, ‘__ror__‘, ‘__rsub__‘, ‘__rxor__‘, ‘__setattr__‘, ‘__sizeof__‘, ‘__str__‘, ‘__sub__‘, ‘__subclasshook__‘, ‘__xor__‘, ‘add‘, ‘clear‘, ‘copy‘, ‘difference‘, ‘difference_update‘, ‘discard‘, ‘intersection‘, ‘intersection_update‘, ‘isdisjoint‘, ‘issubset‘, ‘issuperset‘, ‘pop‘, ‘remove‘, ‘symmetric_difference‘, ‘symmetric_difference_update‘, ‘union‘, ‘update‘]

 1 l1 = [‘11‘, ‘22‘, ‘33‘,]
 2 l2 = [‘44‘, ‘55‘, ‘66‘, ]
 3
 4 s1 = set(l1)  #将一组可迭代的数据传入set集合
 5 print(s1)
 6
 7 s1.add(‘alex‘)  #给s1添加一个新元素alex,
 8 print(s1)
 9
10 s1.add(‘alex‘)  #给s1传入一个相同的元素后,对比输出结果二和三,结果并没有改变,由此可见s1集合是一个无序且不重复的元素集合
11 print(s1)
12
13 #{‘11‘, ‘33‘, ‘22‘}          #第一次输出
14 #{‘11‘, ‘33‘, ‘22‘, ‘alex‘} #第二次输出
15 #{‘11‘, ‘33‘, ‘22‘, ‘alex‘} #第三次输出

add 添加不重复的元素

1 #difference生成一个新的集合,将新传入的集合移除掉,不能对原来的集合进行修改,需要重新赋值给一个变量
2
3 s2 = set([‘alex‘, ‘eric‘, ‘tony‘, ])
4 s3 = s2.difference([‘alex‘, ‘eric‘])
5 print(s3)
6 #结果输出 {‘tony‘}

difference 差异比较

1 s2 = set([‘alex‘, ‘eric‘, ‘tony‘, ‘alex‘])
2 s4 = s2.difference_update([‘alex‘, ‘eric‘,‘jack‘])
3 print(s2)   #结果输出 {‘tony‘}
4 print(s4)   #结果输出  None
5
6 #difference_update将原来的集合修改,difference_update和difference都是将新传入的集合删掉,不同之处在于difference是生成一个新的集合,difference_update是对原来的集合进行修改,不会生成一个新的集合

difference_update 差异更新

1 s2 = set([‘alex‘, ‘eric‘, ‘tony‘,])
2 s3 = s2.discard(‘eric‘)
3 print(s2)
4
5 #结果输出{‘tony‘, ‘alex‘}

discard删除一个元素

1 #pop随机删除一个元素,并获取删除的这个元素,可将删除的这个元素赋值给变量
2
3 s2 = set([‘alex‘, ‘eric‘, ‘tony‘,])
4 ret = s2.pop()
5 print(s2)  #结果输出{‘alex‘, ‘eric‘}
6 print(ret)  #从新赋值给变量ret ,结果输出 tony

pop 随机删除元素

1 #remove移除元素,需要指定参数,remove没有返回值
2
3 s2 = set([‘alex‘, ‘eric‘, ‘tony‘,])
4 s2.remove(‘eric‘)
5 print(s2)   #结果输出 {‘alex‘, ‘tony‘}

remove移除指定元素

 1 l1 = [‘alex‘, ‘eric‘, ‘jack‘, ‘laiying‘,]
 2 l2 = [‘jack‘, ‘tom‘, ‘laiying‘,]
 3 s1 = set(l1)
 4 s2 = set(l2)
 5 print(s1)
 6 s3 = s1.intersection(s2)
 7 print(s1)
 8 print(s2)
 9 print(s3)
10
11
12 #{‘eric‘, ‘alex‘, ‘laiying‘, ‘jack‘}  第一次原始集合
13 #{‘eric‘, ‘alex‘, ‘laiying‘, ‘jack‘}  集合s1和s2进行交集判断后的输出结果,并没有改变对象本身
14 #{‘laiying‘, ‘tom‘, ‘jack‘}   s2集合没有发送改变
15 #{‘laiying‘, ‘jack‘}   通过交集比较,返回了一个新的元素集合,返回的是s1和s2共同拥有的元素集合

intersection取交集元素集合

 1 l1 = [‘alex‘, ‘eric‘, ‘jack‘, ‘laiying‘,]
 2 l2 = [‘jack‘, ‘tom‘, ‘laiying‘,]
 3 s1 = set(l1)
 4 s2 = set(l2)
 5 print(s1)
 6
 7 s3 = s1.intersection_update(s2)
 8 print(s1)
 9 print(s3)
10
11 #通过输出结果可以看出,s1直接更新了自己,把与传入的集合,与集合里面不相同的元素删掉,且没有返回值
12 {‘laiying‘, ‘eric‘, ‘alex‘, ‘jack‘}
13 {‘laiying‘, ‘jack‘}
14 None

indersection_update 交集更新

 1 l1 = [‘alex‘, ‘eric‘,]
 2 l2 = [‘tom‘, ‘jack‘,]
 3 s1 = set(l1)
 4 s2 = set(l2)
 5 print(s1)
 6
 7 s3 = s1.isdisjoint(s2)
 8 print(s1)
 9 print(s3)
10
11 #{‘eric‘, ‘alex‘}
12 #{‘eric‘, ‘alex‘}
13 #True
14
15 #当两个集合之间没有任何交集时,就返回True,否则就返回False

isdisjoint判断是否没有交集

 1 l1 = [‘alex‘, ‘eric‘, ‘jack‘,]
 2 l2 = [‘tom‘,‘laiying‘,]
 3 s1 = set(l1)
 4 s2 = set(l2)
 5 s3 = set([‘alex‘, ‘jack‘,])
 6
 7
 8 print(s1.issubset(s2))  #输出为False说明s1不是s2的子集
 9 print(s1.issubset(s3))  #输出False说明不是s3的子集
10 print(s3.isdisjoint(s1)) #输出True说明s3是s1的子集
11
12 #结果输出
13 #False
14 #False
15 #True

issubset 是否是子集

1 l1 = [‘alex‘, ‘eric‘, ‘jack‘,]
2 l2 = [‘tom‘,‘laiying‘,]
3 s1 = set(l1)
4 s2 = set(l2)
5 s3 = set([‘alex‘, ‘jack‘,])
6
7 print(s1.issuperset(s3))  #结果输出True,说明s1是s3的父集
8 print(s3.issuperset(s1)) #结果输出False,说明s3不是s1的父集

issuperset是否是父集

 1 #symmetric_difference,该对象返回一个新的集合,传入的元素与对象本身比较,如果传入的元素里面有的元素,而对象本身没有,则添加到对象本身集合内,最终返回一个新的集合
 2
 3 l1 = [‘alex‘, ‘eric‘, ‘jack‘,]
 4 l2 = [‘tom‘,‘laiying‘,]
 5 s1 = set(l1)
 6 s2 = set(l2)
 7 s3 = set([‘alex‘, ‘jack‘,])
 8 print(s1)
 9 #结果输出 {‘eric‘, ‘alex‘, ‘jack‘}
10 s4 = s1.symmetric_difference(s2)
11
12 print(s1)
13 #结果输出 {‘eric‘, ‘alex‘, ‘jack‘}
14 print(s4)
15 #结果输出{‘eric‘, ‘alex‘, ‘tom‘, ‘laiying‘, ‘jack‘}

symmetric_difference 差集对比

 1 #symmetric_difference_update差集更新,直接扩展对象本身与传入集合的没有交集的元素
 2
 3 l1 = [‘alex‘, ‘eric‘, ‘jack‘,]
 4 l2 = [‘tom‘,‘laiying‘,]
 5 s1 = set(l1)
 6 s2 = set(l2)
 7
 8 print(s1)  #s1原始集合,结果输出 {‘eric‘, ‘alex‘, ‘jack‘}
 9 s4 = s1.symmetric_difference_update(s2)
10 print(s1)  #s1差集后的结果输出{‘laiying‘, ‘eric‘, ‘alex‘, ‘jack‘, ‘tom‘}
11 print(s4)  #该方法没有返回值  None

s1.symmetric_difference_update 差集更新

1 #union返回新集合,j将对象本身与传入的集合元素比较,把所有的元素重新组合成一个新的集合返回
2 l1 = [‘alex‘, ‘eric‘, ‘jack‘,]
3 l2 = [‘tom‘,‘laiying‘,]
4 s1 = set(l1)
5 s2 = set(l2)
6 s4 = s1.union(s2)
7
8 print(s1) #结果输出{‘eric‘, ‘alex‘, ‘jack‘},对象本身没有变化
9 print(s4) #结果输出{‘laiying‘, ‘jack‘, ‘alex‘, ‘tom‘, ‘eric‘}

union 返回新集合

1 #update更新集合,将会对集合本身进行扩展,如果对象本身不存在这个传入的元素,则添加到对象本身的元素集合
2
3 dic1 = {‘k1‘:‘v1‘, ‘k2‘:‘v2‘}
4 dic2 = {‘k1‘:‘v1‘, ‘k2‘:‘v2‘, ‘k3‘:‘v3‘}
5 s1 = set(dic1)
6 print(s1) #结果输出{‘k1‘, ‘k2‘}
7
8 s2 = s1.update(dic2)
9 print(s1)  #结果输出 {‘k3‘, ‘k1‘, ‘k2‘}

update更新集合

时间: 2024-10-24 18:32:23

初识Python第三天的相关文章

初识Python(三)

一.作用域 对于变量的作用域,执行声明并在内存中存在,该变量就可以在后续的代码中使用: 外层变量,可以被内层变量使用:内层变量,也可以被外层变量使用: 如下示例: #!/usr/bin/env python # -*- coding: UTF-8 -*- if 1==1:     name1 = 'user1'      name2 = name1 print name2 执行结果如下: 二.各种进制的表示方法 二进制,01 八进制,01234567 十进制,0123456789 十六进制,01

初识Python第三天(二)

2.2 OrderedDict有序字典 1 import collections 2 dic = collections.OrderedDict() 3 dic['k1'] = 'v1' 4 dic['k2'] = 'v2' 5 dic['k3'] = 'v3' 6 print(dic) 7 dic.move_to_end('k1') #将'k1'放到字典末尾 8 print(dic) 9 10 #OrderedDict([('k1', 'v1'), ('k2', 'v2'), ('k3', '

第00次作业:初识python语言 and 我对python的期待

初识python 首次被python吸引是在第一次理论课上,老师用几行代码实现"延时打开网页"的时候,感觉很厉害的样子,之后,便想去了解它,掌握它,应用它. 第一次运行python语言程序,真的是有点手忙脚乱,运行不成功,然后出现了一串串看不懂的错误提示,不知道从何开始着手去解决,后来问了同学,原来是缺少了一对括号.慢慢地开始学着自己去理解老师给的代码,改写里面的数字,查看数字改变后的结果,每一次小小收获都会使内心迸发一种小欣喜,促使着我更加深入的去学习这门语言. 我对python的期

初识python面向对象

一.初识python面向对象: class Person: #使用class关键字定义一个类 age=0 #类变量(静态变量) def eat(self,food): #定义一个方法 self.age=5 #self是实例本身,self.age是实例变量 print("I will eat %s" %food) xiaofan=Person() #实例化,生成对象xiaofanprint(xiaofan.age) #调用对象方法,因为还没有调用eat方法,则使用类方法的值xiaofan

小Y的Python学习日志--初识Python

#本文仅为个人学习过程的整理和记录,如有从他人博客.网站摘录的内容,本人会明确标明,如有涉及侵权,请联系本人,本人会在第一时间删除. 一初识Python 1.Python的历史 (1)Python是一种解释性的.面向对象的.带有动态语义的高级程序设计语言(胶水语言). (2)Python简史: 1989年Guido开发,名称由来 (3)Python发展历程: CNRI时期: BeOpen时期: DC时期(Zope系统): Python3.0: 2.Python特征 (1)Python在编程语言中

Python - 初识Python

Python - 初识Python 认识开发语言 开发语言有高级语言的低级语言之分 低级语言: c, 混编, 属于机器码,编程中底层用的 实现效率低,执行效率高,对硬件的可控性强,目标代码小,可维护性差,可移植性差 高级语言: Python, Jave, PHP, C#, go.. 属于字符码,相比机器码跟接近于自然语言,好理解. 实现效率高,执行效率低,对硬件的可控性弱,目标代码大,可维护性好,可移植性好 解释型和编译型语言 首先Python 是一门解释型语言, 计算机是不能识别高级语言的,因

初识python之 APP store排行榜 蜘蛛抓取(一)

直接上干货!! 采用python 2.7.5-windows 打开 http://www.apple.com/cn/itunes/charts/free-apps/  如上图可以见采用的是utf-8 编码 经过一番思想斗争  编码如下 (拍砖别打脸) #coding=utf-8 import urllib2 import urllib import re import thread import time #----------- APP store 排行榜 ----------- class

Python进阶(三十五)-Fiddler命令行和HTTP断点调试

Python进阶(三十五)-Fiddler命令行和HTTP断点调试 一. Fiddler内置命令 ??上一节(使用Fiddler进行抓包分析)中,介绍到,在web session(与我们通常所说的session不是同一个概念,这里的每条HTTP请求都称为一个session).界面中能够看到Fiddler抓取的全部HTTP请求.而为了更加方便的管理全部的session, Fiddler提供了一系列内置的函数用于筛选和操作这些session(习惯命令行操作Linux的童鞋应该能够感受到这会有多么方便

Python进阶(三十四)-Python3多线程解读

Python进阶(三十四)-Python3多线程解读 线程讲解 ??多线程类似于同时执行多个不同程序,多线程运行有如下优点: 使用线程可以把占据长时间的程序中的任务放到后台去处理. 用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度. 程序的运行速度可能加快. 在一些等待的任务实现上如用户输入.文件读写和网络收发数据等,线程就比较有用了.在这种情况下我们可以释放一些珍贵的资源如内存占用等等. ??线程在执行过程中与进程还是有区别的.每个独立