python王者归来—学习笔记(12)

第十章 集合(集合定义与set函数、集合操作-交集-并集-差集等、适用集合方法、适用集合函数-max-min-sum-sorted等、不可变集合)

集合的基本概念是无序且每个元素是唯一的,集合元素的内容是不可变的(immutable),常见的元素有整数(intger)、浮点数(float)、字符串(string)、元组(tuple)等。至于可变(mutable)内容列表(list)、字典(dict)、集合(set)等不可以是集合元素。但是集合本身是可变的(mutable),我们可以增加或删除集合的元素。

一、集合定义。Python可以使用大括号“{ }”或set( )函数建立集合。使用大括号{}建立集合语法如下:name_set = {元素1, ..., 元素n}。集合的特色是元素是唯一的,所以如果定义集合时有重复元素情形,多的部分将被自动舍去。集合包含的元素不一定是同一种数据类型,有可能同时包含整数、字符串、元组等各种数据类型元素。

字典是用大括号定义,集合也是用大括号定义。使用空的大括号{ }定义,获得的是空字典,而不是空集合。定义空集合必须用set()函数:name_set = set()。

set( )函数也可以带参数,参数可以是字符串(string)、列表(list)、元组(tuple)等,这时原先字符串(string)、列表(list)、元组(tuple)的元素将被转成集合元素。如果再将集合通过list()或者tuple()函数转为列表或者元组,就可以删除原先列表或元组中的重复元素。

x = set('DeepLearning mean deep learning')  #使用字符串建立集合
#集合元素具有唯一性,虽然原先字符串有很多字母重复,但经过set()处理后不再重复
print(x)
print(type(x))

#表达式1
fruits = ['apple', 'orange', 'apple', 'banana', 'orange']
x = set(fruits) #使用列表建立集合
print(x)
#表达式2
y = set(['apple', 'orange', 'apple', 'banana', 'orange']) #使用列表建立集合
print(y)

#使用元组建立集合
cities = set(('beijing', 'shanghai', 'beijing', 'guangzhou', 'shanghai'))
print(cities)
#集合转为元组,去除重复元素
tuple_cities = tuple(cities)
print(tuple_cities)

二、集合的操作有如下几种:

集合操作符号说明A和B集合操作示例   假设集合A = {1, 3, 4, 5}, 集合B = {2, 3, 5, 7, 9}
&交集,取两个集合共同元素,也可以使用intersection( )方法完成

A & B

A.intersection(B)

B.intersection(A)

C = A & B
print(C)
C = B.intersection(A)
print(C)
|并集,取两个集合所有元素,也可以使用union( )方法完成

A | B

A.union(B)

B.union(A)

D = A | B
print(D)
D = B.union(A)
print(D)
-差集,获得属于A集合,同时不属于B集合的元素,也可以使用difference( )方法完成。A-B和B-A含义不同,结果也不同

A - B

A.difference(B)

E = A - B
F = B - A
print(E, F)
E = A.difference(B)
F = B.difference(A)
print(E, F)
^对称差集,获得属于A或B集合,但是排除同时属于A和B的元素,也可以使用symmetric_difference( )方法完成

A ^ B

A.symmetric_difference(B)

B.symmetric_difference(A)

G = A ^ B
print(G)
G = B.symmetric_difference(A)
print(G)
==等于,判断两个集合是否相等A == Bprint(A == B)
!=不等于,判断两个集合是否不相等A != Bprint(A != B)
in是成员,测试元素是否是集合的元素成员

x in A

y in B

is_in = 4 in A
print(is_in)
is_in = 4 in B
print(is_in)
not in不是成员,测试元素是否不是集合的元素成员

x not in A

y not in B

print(2 not in A)
print(2 not in B)

三、适用集合的方法:

集合方法语法格式及说明示例
add()

A.add(新增元素)

 

增加一个元素到集合,返回值为None

cities = {'beijing', 'guangzhou'}
#增加一般元素
cities.add('shanghai')
print(cities)
#增加已有元素
cities.add('beijing')
print(cities)
#增加元组元素
tup = (1, 2, 3)
cities.add(tup)
print(cities)
copy()

B = A.copy()

 

深拷贝复制集合,经过复制后一个集合内容改变时,不会影响到另一个集合的内容

A = {1, 2, 3}
B = A.copy()
print(A, B)
A.add(4)
print(A, B)
remove()

A.remove(待删除元素)

 

如果指定删除的元素存在集合内,remove( )可以删除这个集合元素,返回值为None;如果指定删除的元素不存在集合内,将有KeyError产生

countries = {'japan', 'china', 'france'}
print(countries)
countries.remove('japan')
print(countries)
discard()

A.discard(待删除元素)

 

可以删除集合的元素,如果元素不存在也不会有错误产生,不论删除结果为何,这个方法会传回None

animals = {'dog', 'cat', 'bird', 'tiger'}
print(animals)
#删除存在元素
animals.discard('cat')  
print(animals)
#删除存在元素打印返回值
print(animals.discard('dog'))
#删除不存在元素打印返回值
print(animals.discard('pig'))
print(animals)

pop()

ret_element = A.pop()

 

用随机方式删除集合元素,所删除的元素将被传回,如果集合是空集合则程序会产生TypeError错误

animals = {'dog', 'cat', 'bird', 'tiger'}
print(animals)
ret_element = animals.pop()
print(ret_element)
print(animals)
clear()

A.clear()

 

删除集合中所有元素,返回值是None

animals = {'dog', 'cat', 'bird', 'tiger'}
animals.clear()
print(animals)
isdisjoint()

ret_boolean = A.isdisjoint(B)

 

如果2个集合没有共同的元素会传回True,否则传回False

A = {'a', 'b', 'c'}
B = {'c', 'd', 'e'}
C = {'h', 'k', 'p'}
boolean = A.isdisjoint(B)
print(boolean)
print(A.isdisjoint(C))
issubset()

ret_boolean = A.issubset(B)

 

判断一个集合是否是另一个集合的子集合,如果是返回True,否则返回False

A = {'a', 'b', 'c'}
B = {'a', 'b', 'c', 'd', 'e'}
print(A.issubset(B))
print(B.issubset(A))
issuperset()

ret_boolean = A.issuperset(B)

 

判断一个集合是否是另一个集合的父集合,如果是返回True,否则返回False

A = {'a', 'b', 'c'}
B = {'a', 'b', 'c', 'd', 'e'}
print(A.issuperset(B))
print(B.issuperset(A))
intersection_update()

A.intersection_update(*B)

 

使用交集更新集合内容,返回值为None。*B代表可以有1到多个集合,如果只有一个集合,例如是B,则执行后A将是A与B的交集。如果*B代表(B, C),则执行后A将是A、B与C的交集

A = {'a', 'b', 'c', 'd'}
B = {'c', 'a', 'k'}
C = {'c', 'f', 'w'}
ret_value = A.intersection_update(B)
print(ret_value)
print(A, B)
A.intersection_update(B, C)
print(A, B, C)
update()

A.update(B)

 

使用并集更新集合内容,返回值为None。上面是将集合B的元素加到集合A内

A = {'a', 'b', 'c', 'd'}
B = {'c', 'a', 'k'}
A.update(B)
print(A, B)
difference_update()

A.difference_update(B)

 

删除集合内与另一集合重复的元素,返回值为None

A = {'a', 'b', 'c', 'd'}
B = {'c', 'a', 'k'}
A.difference_update(B)
print(A, B)
symmetric_difference_update()

A.symmetric_difference_update(B)

 

使用对称差集更新集合内容,返回值为None

A = {'a', 'b', 'c', 'd'}
B = {'c', 'a', 'k'}
A.symmetric_difference_update(B)
print(A, B)

四、适用集合的基本函数操作:

1、max(name_set)、min(name_set)、sum(name_set):如果元素内容是数值,可以使用max( )列出最大值、min( )列出最小值和sum( )列出总和。如果元素内容是字符或字符串,可以使用max( )列出unicode码的最大值、min( )列出unicode码的最小值,sum( )则不可用在字符或字符串元素。

2、len(name_set):可以列出集合元素的数量。

3、sorted(name_set):对集合元素进行排序,如果执行sorted(name_set, reverse = True)则是进行反向排序。

4、enumerate(name_set):传回连续整数配对的enumerate对象,之前在列表和元组中均有说明。

drinks = {'coffee', 'tea', 'wine'}
for drink in drinks:
    print(drink)

enum_drinks = enumerate(drinks)
print(enum_drinks) #打印enumerate对象所在内存地址
print(type(enum_drinks)) #打印对象类型
print(list(enum_drinks)) #转成列表打印输出

for item in enumerate(drinks): #循环输出
    print(item)

for count, item in enumerate(drinks): #将coun和元素内容分开输出
    print(count, item)

for count, item in enumerate(drinks, 10):  #将起始值设置为10
    print(count, item)

五、冻结集合:set是可变集合,frozenset是不可变集合也可直译为冻结集合,这是一个新的类别(class),只要设定元素后,这个冻结集合就不能再更改了。如果将元组(tuple)想成不可变列表(immutablelist),冻结集合就是不可变集合(immutable set)。冻结集合的不可变特性优点是可以用它作字典的键(key),也可以作为其他集合的元素。冻结集合的建立方式是使用frozenset()函数,冻结集合建立完成后,不可使用add( )或remove( )更改冻结集合的内容。但是可以执行intersection( )、union( )、difference( )、symmetric_difference( )、copy( )、issubset()、issuperset( )、isdisjoint( )等方法。

X = frozenset([1, 3, 4])
Y = frozenset((4, 7, 9))
print(X, Y)
for x in X:
    print(x)
for y in Y:
    print(y)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值