Set 集合

set - unordered collections of unique elements

创建一个set/一个空set

# create a new set
set1 = {1,2,3}
print(type(set1)) # result => <class 'set> set2 = set()
print(type(set2)) # create an empty set, result => <class 'set'> # as the object is iterable, we can create a set with list, tuple, dictionary etc.
list1 = [1, 2, 3]
set2 = set(list1)
print(set2, type(set2))
# {1, 2, 3} <class 'set'> tuple1 = (1, 2, 3)
set2 = set(tuple1)
print(set2, type(set2))
# {1, 2, 3} <class 'set'> dict1 = {'k1':1, 'k2':2}
set2 = set(dict1)
print(set2, type(set2))
# {'k1', 'k2'} <class 'set'> # check if below is workable to create an empty set
set3 = {}
print(type(set3))
# type result => <class 'dict'> Failed
# so the variable_name = {} only works for creating a new dictionary
set在爬虫领域应用较多,比如有很多待爬取的网页,每爬取一个新网页就添加到数据中,如果在数据里已经存在这个网页,就不爬取。 
set的功能:
# to add a new element, we can use add()
# as set only contains different elements, if we add the same element multiple times, only one will remain set1 = {1, 2, 3, } set1.add(4)
set1.add(4)
set1.add(4)
print(set1)
# result => {1, 2, 3, 4} # to clear a set
set1.clear()
print(set1)
# => set() # a.difference(b), elements in a but not in b
set1 = {1, 2, 3, 5, 8, }
set2 = {0, 1, 2, 3, }
ret1 = set1.difference(set2)
print(ret1)
# => {8, 5}
ret2 = set2.difference(set1)
print(ret2)
# => {0} # difference() function does not change the set, if we want to change it, we can use difference_update()
set0 = {-1, }
set0.difference_update(set2)
print(set0) # discard() to remove an element, if not a member, do nothing
set0 = {1, 2, 3, }
set0.discard(1)
print(set0)
set0.discard(-1)
print(set0)
# both print out: {2, 3}, no error msg # if we use remove(), when the target element is not a member, there'll be error
# set0.remove(-1)
# print(set0)
'''
Traceback (most recent call last):
set()
File "D:/NaomiPyer/1016/1017_set_functions.py", line 44, in <module>
{8, 5}
set0.remove(-1)
{0}
KeyError: -1
''' # intersection(), gets the shared info
set1 = {1, 2, 3, 5, 8, }
set2 = {0, 1, 2, 3, }
ret3 = set1.intersection(set2)
print(ret3)
# => {1, 2, 3} # a.intersection_update(b) update a with the intersection of a and b
set1 = {1, 2, 3, 5, 8, }
set2 = {0, 1, 2, 3, }
set1.intersection_update(set2)
print(set1)
# => {1, 2, 3, } # isdisjoint() returns True if two sets has no intersection
set1 = {1, 2, 3, }
set2 = {0, }
ret1 = set1.isdisjoint(set2)
print(ret1)
# => True set1 = {1, 2, 3, }
set2 = {1, }
ret1 = set1.isdisjoint(set2)
print(ret1)
# => False # issubset() report whether another set contains this set
set1 = {1, }
set2 = {0, 1, 2, 3, }
ret1 = set1.issubset(set2)
print(ret1)
# => True, set1 is the subset of set2
# issuperset() is the opposite
ret1 = set1.issuperset(set2)
ret2 = set2.issuperset(set1)
print(ret1) # False
print(ret2) # True # pop() remove and return an arbitrary set element.
# raises keyError if the set is empty
set1 = {1, 2, 3, 4, 6, }
ret1 = set1.pop()
print(set1) # => {2, 3, 4, 6}
print(ret1) # => 1
set1 = set()
ret1 = set1.pop()
print(set1)
print(ret1) # KeyError: 'pop from an empty set' - like remove(), raises KeyError # symmetric_difference()
# returns the symmetric difference of two sets as a new one
set1 = {0, 1, 2, }
set2 = {-1, 0, 3}
ret1 = set1.symmetric_difference(set2)
print(ret1)
# => {1, 2, 3, -1} # symmetric_difference_update()
# update set1 with the result
set1 = {0, 1, 2, }
set2 = {-1, 0, 3}
set1.symmetric_difference_update(set2)
print(set1)
# => {1, 2, 3, -1} # union() returns the union of sets as a new set
set1 = {0, 1, 2, }
set2 = {-1, 0, 3}
ret1 = set1.union(set2)
print(ret1)
# => {0, 1, 2, 3, -1} # update() updates the set with the union of itself and the other set
set1 = {0, 1, 2, }
set2 = {-1, 0, 3}
set1.update(set2)
print(set1)
# => {0, 1, 2, 3, -1}

关于set的方法,intersection()即为两个set的交集,difference()为补集,union() 为并集。

方法里有update的,即为在原set上直接更新。

三目运算|三元运算

if condition:

  block1

else:

  block2

name = value1 if condition else: value2

name = if condition? value1: value2

浅度copy VS 深度copy

str 一次性创建后,不能被修改,数据修改其实是要再次创建的

list 链表创建后会指定下一个元素的位置

int 和 str 的赋值,copy和deepcopy,他们所指向的都是同一内存地址

import copy

n1 = 123

n2 = n1

n3 = copy.copy(n1)

n4 = copy.deepcopy(n2)

对于其他的数据类型如list, tuple, dict, set 等,在copy的时候,内存地址是不一样的

1. 赋值

创建一个变量,变量指向原内存地址

2. 浅copy 和 深copy

浅copy 在内存中只额外创建第一层数据

deepcopy 是除了最后一层,都创建了一次

 import copy

 n1 = n1 = {
'language': 'python',
'IDE': 'PyCharm',
'operating system': ['Linux', 'Windows']
} n2 = copy.copy(n1)
n3 = copy.deepcopy(n1) print(id(n1)) #
print(id(n2)) #
print(id(n3)) #
# all id()'s are different

对比copy和deepcopy的指向

【Python全栈笔记】03 [模块二] 16-17 Oct Set 集合,三目运算的更多相关文章

  1. Python全栈开发【模块】

    Python全栈开发[模块] 本节内容: 模块介绍 time random os sys json & picle shelve XML hashlib ConfigParser loggin ...

  2. Python全栈开发【基础二】

    Python全栈开发[基础二] 本节内容: Python 运算符(算术运算.比较运算.赋值运算.逻辑运算.成员运算) 基本数据类型(数字.布尔值.字符串.列表.元组.字典) 其他(编码,range,f ...

  3. Python全栈day 03

    Python全栈day 03 一.运算符补充 in ,逻辑运算符,判断某字符或某字符串是否在一个大的字符串中,输出得到bool型数据. value = '我是中国人' v = '我' if v in ...

  4. Python全栈开发:模块

    模块,用一砣代码实现了某个功能的代码集合. 参考资源:http://www.cnblogs.com/alex3714/articles/5161349.html 类似于函数式编程和面向过程编程,函数式 ...

  5. Python全栈day21-22-23(模块)

    一,python的模块 Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句. 模块让你能够有逻辑地组织你的 Python ...

  6. 【Python全栈笔记】03 [模块二] 16-17 Oct 函数

    定义一个函数 def function_name(形式参数): 代码块 return 'Value' #如果没有写return,则默认返回None # 一个函数到return这一行就结束执行了,在re ...

  7. 【Python全栈笔记】04 [模块二] 18 Oct lambda表达式, 内置函数

    lambda表达式 lambda表达式是函数的一种简化,如下面两种函数定义方法,实际上效果是一样的. 使用lambda表达式的函数,func2是函数名,lambda: 后面的123 即为返回值. de ...

  8. 【Python全栈笔记】01 [模块二] 14-15 Oct 运算符和字符串 4-1

    编码的问题 中文版 Windows 终端是默认GBK编码格式,python2默认为ASCII编码,虽然我们注释了需要用UTF-8,但是通过命令行运行的文件如果print中文内容还是会出现乱码. Uni ...

  9. 【Python全栈笔记】08 [模块二] 20 Oct 递归 -*** 待补充

    递归 引入 递归的表现形式 下面是四个函数,互相调用返回结果 # 引入 递归的表现形式 def f1(): ' def f2(): r = f1() return r def f3(): r = f2 ...

随机推荐

  1. Norflash控制器的Verilog建模之二(仿真)

    前言:经过几天修改,norflash控制器基本已经完成,通过仿真.完整的norflash包含2个模块:直接操作硬件的norflash_ctrl.v与控制ctrl模块的驱动norflash_driver ...

  2. Chrome和Firefox浏览器执行new Date() 函数传参数得到不同结果的陷阱

    某日,同事问到关于new Date() 函数传参数,在火狐浏览器和谷歌浏览器控制台运行,会得到不同的结果,刚开始觉得不可能,后来实际操作才发现此陷阱 var date = new Date('2014 ...

  3. 剑指Offer:面试题29——数组中出现次数超过一半的数字(java实现)

    PS:在前几天的面试中,被问到了这个题.然而当时只能用最低效的方法来解. 问题描述: 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2, ...

  4. Ubuntu Kylin 14.04-修改IP固定地址

           前言:今天我们办公室的网络不稳定,隔一会时间就断掉,后来请负责网络的同事来处理了一下,说是路由器的有些配置起冲突了,所以他将IP地址做了一些修改,比如:原IP是192.168.0.110 ...

  5. Struts2从一个action转到另一个action的两种方法

    在Struts2中,Action处理完用户请求后,将会返回一个字符串对象,这个字符串对象就是一个逻辑视图名.Struts 2通过配置逻辑视图名和物理视图之间的映射关系,一旦系统收到Action返回的某 ...

  6. 解决NetBeans编辑器中文乱码问题

    在JDK→JRE→lib目录下找到fontconfig.properties.src文件,打开,找到# Component Font Mappings,表示字体映射,可以看到下面列出了几种字体映射集合 ...

  7. 一键安装lamp环境 centos

    linux centos yum安装LAMP环境 /*************链接**************/http://www.cnblogs.com/suger/p/3832093.html ...

  8. How to acquire an Android phone with locked bootloader?

    As we know that some devices come with locked bootloaders like Sony, HUAWEI, hTC...If you try to unl ...

  9. 将字母变为其下个字母(abc变为bcd)

    题目描述 输入一行电报文字,将字母变成其下一字母(如'a'变成'b'--'z'变成'a'其它字符不变). 输入 一行字符 输出 加密处理后的字符 样例输入 a b 样例输出 b c#include & ...

  10. 在spring框架中配置Quartz定时器发生错误: class org.springframework.scheduling.quartz.JobDetailBean has interface org.quartz.JobDetail as sup

    这是由于spring和Quartz的不兼容性造成的.我的spring是4.0.2,但是Quartz是2.2.3的,换了一个1.8版本的Quartz就解决问题了.