欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python学习之集合(set)的功能、定义和实例讲解

程序员文章站 2024-01-10 00:00:10
集合(set)-字典的近亲 集合的两大功能: 集合可以实现去重的功能 集合可以实现关系测试; 交集, 差集,并集, 是否子集, 是否没有交集 集合(set)的定义 集合是不...

集合(set)-字典的近亲

集合的两大功能:

集合可以实现去重的功能 集合可以实现关系测试; 交集, 差集,并集, 是否子集, 是否没有交集

集合(set)的定义

集合是不重复的数据结构 如果花括号里面为空,则是字典类型

s = { }
print type(s)
#

定义集合的第一种方式

s = {1,2,3,4}
print type(s)
#

定义集合的第二种方式

s = set()
print type(s)
#

s = set([1,2,3,1,2,3])
print s
#set([1, 2, 3])

s = set("hello")
print s
#set(['h', 'e', 'l', 'o'])

s = set((1,2,3,4,5))
print s
#set([1, 2, 3, 4, 5])

s = set({'a':1, 'b':2, 'c':3})
#set(['a', 'c', 'b'])

集合的特性

集合是无序的, 不重复的数据类型; 因此不支持索引,也不支持切片;也不支持重复;也不支持连接; 支持成员操作符; 支持for循环;

#支持成员操作符
s = {1, 2, 3, 4, 1, 2}
print 1 in s
#True
print 2 not in s
#False
#集合支持for循环,是可迭代的
s = {1,2,3,2,1,5,6}
for i in s :
    print i ,
#1 2 3 5 6

集合的增删改查

增加

s = {1,2,3,4,1,2,3}
print s
#set([1, 2, 3, 4])

s.add(1) 
#set([1, 2, 3, 4])

s.add(7)
print s
#set([1, 2, 3, 4, 7])
s = {1,2,3,2,1,5,6}
s1 = {'a', 'b', 'c'}
s.update(s1)
print s
#set(['a', 1, 2, 3, 5, 6, 'c', 'b'])

查找(关系测试操作)

数学关系

s1 = {1, 2, 3, 4}
s2 = {1, 2, 3, 5}

# 交集
print s1 & s2
#set([1, 2, 3])

# 并集
print s1 | s2
#set([1, 2, 3, 4, 5])

# 差集
print s1 - s2
#set([4])
print s2 - s1
#set([5])

# 对等差分
print s1 ^ s2
#set([4, 5])

集合方法

s1 = {1, 2, 3, 4}
s2 = {1, 2, 3, 5}

# 交集
print s1.intersection(s2)
#set([1, 2, 3])


# 并集
print s1.union(s2)
#set([1, 2, 3, 5])

# 差集
print s1.difference(s2)
#set([4])
print s2.difference(s1)
#set([5])

# 对等差分
print s1.symmetric_difference(s2)
#set([4, 5])

#补充update
s1 = {1, 2, 3, 4}
s2 = {1, 2, 3, 5}
print s1.intersection_update(s2)
#set([1, 2, 3])

删除

pop( ) 随机删除
s = {'a','hello', 'redhat', 'b', 18, 33, 4, 1, 2, 7, 6, 5}
print s
#set(['a', 1, 2, 'b', 4, 5, 6, 7, 18, 'redhat', 33, 'hello'])
print s.pop()
#a

remove( ) 删除集合指定元素, 如果不存在,则报错

s = {'alice','hello', 'westos', 'b', 18}
s.remove('alice')
print s
#set([18, 'b', 'westos', 'hello'])
discard( ) 删除集合指定元素, 如果不存在,则do nothing
s = {'alice','hello', 'westos', 'b', 18}
s.discard("a")
print s
#set([18, 'b', 'westos', 'alice', 'hello'])
clear( ) 清空集合元素
s = {'alice','hello', 'westos', 'b', 18}
s.clear()
print s
#set([])

应用:

(华为机试题)题目描述

明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性, 他先用计算机生成了N个1到1000之间的随机整数(N≤1000), N是用户输入的,对于 其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应 着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺 序去找同学做调

查。请你协助明明完成“去重”与“排序”的工作; 提示:

#生成随机数
import random
random.randint(1,1000)
#列表的去重

代码如下:

import random
s = set()
N = input('输入一个数:')
for i in range (N) :
    s.add(random.randint(1,1000))

# sorted 是内置方法, 用来排序;
print sorted(s)

#通过列表排序
# li = list(s)
# li.sort()
# print li

总结

可变数据类型: 列表, 字典, 集合 不可变数据类型: 数值类型, 字符串, 元组

可变数据类型实现某个功能, 直接改变可变的数据类型; 不可变数据类型实现某个功能,需要将结果赋值给另外一个变量; 是否实现for循环

可迭代数据类型: str, list, tuple, dict, set 不可迭代数据类型:数值类型 是否支持索引,切片, 重复和连接特性

有序的数据类型: str, list, tuple 无序的数据类型: dict, set