没有合适的资源?快使用搜索试试~ 我知道了~
技术图文:集合技术在求解算法题中的应用
0 下载量 164 浏览量
2021-01-20
02:17:34
上传
评论
收藏 601KB PDF 举报
温馨提示
试读
13页
背景 前段时间,在知识星球立了一个Flag,这是总结Leetcode刷题的第四篇图文。 理论部分 HashSet C# 语言中 HashSet 是包含不重复项的无序列表,称为“集合(set)”。由于set是一个保留字,所以用HashSet来表示。 public HashSet(); -> 构造函数 public HashSet(IEnumerable collection); -> 构造函数 public int Count { get; } -> 获取集合中包含的元素数。 public bool Add(T item); -> 将指定的元素添加到集合中。 public bool Remo
资源详情
资源评论
资源推荐
技术图文:集合技术在求解算法题中的应用技术图文:集合技术在求解算法题中的应用
背景背景
前段时间,在知识星球立了一个Flag,这是总结Leetcode刷题的第四篇图文。
理论部分理论部分
HashSet
C# 语言中 HashSet 是包含不重复项的无序列表,称为“集合(set)”。由于set是一个保留字,所以用HashSet来表示。
public HashSet();
-> 构造函数
public HashSet(IEnumerable collection);
-> 构造函数
public int Count { get; }
-> 获取集合中包含的元素数。
public bool Add(T item);
-> 将指定的元素添加到集合中。
public bool Remove(T item);
-> 从集合中移除指定元素。
public void Clear();
-> 从集合中移除所有元素。
public bool Contains(T item);
-> 确定集合中是否包含指定的元素。
public void UnionWith(IEnumerable other);
-> 并集
public void IntersectWith(IEnumerable other);
-> 交集
public void ExceptWith(IEnumerable other);
-> 差集
public bool IsSubsetOf(IEnumerable other);
-> 确定当前集合是否为指定集合的子集。
public bool IsProperSubsetOf(IEnumerable other);
-> 确定当前集合是否为指定集合的真子集。
public bool IsSupersetOf(IEnumerable other);
-> 确定当前集合是否为指定集合的超集。
public bool IsProperSupersetOf(IEnumerable other);
-> 确定当前集合是否为指定集合的真超集。
public bool Overlaps(IEnumerable other);
-> 确定是否当前集合和指定的集合共享通用元素。
public bool SetEquals(IEnumerable other);
-> 确定是否当前集合和指定集合包含相同的元素。
set
Python 中set与dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。
num = {}
print(type(num)) #
num = {1, 2, 3, 4}
print(type(num)) #
集合的创建
先创建对象再加入元素(不可变类型,即可哈希的值)。
在创建空集合的时候只能使用s = set() ,因为s = {} 创建的是空字典。
basket = set()
basket.add('apple')
basket.add('banana')
print(basket) # {'banana', 'apple'}
直接把一堆元素用花括号括起来{元素1, 元素2, ..., 元素n}。
重复元素在set中会被自动被过滤。
basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
print(basket) # {'banana', 'apple', 'pear', 'orange'}
使用set(value)工厂函数,把列表或元组转换成集合。
a = set('abracadabra')
print(a)
# {'r', 'b', 'd', 'c', 'a'}
b = set(("Google", "Lsgogroup", "Taobao", "Taobao"))
print(b)
# {'Taobao', 'Lsgogroup', 'Google'}
c = set(["Google", "Lsgogroup", "Taobao", "Google"])
print(c)
# {'Taobao', 'Lsgogroup', 'Google'}
去掉列表中重复的元素
lst = [0, 1, 2, 3, 4, 5, 5, 3, 1]
temp = [] for item in lst:
if item not in temp:
temp.append(item)
print(temp) # [0, 1, 2, 3, 4, 5]
a = set(lst)
print(list(a)) # [0, 1, 2, 3, 4, 5]
从结果发现集合的两个特点:无序 (unordered) 和唯一 (unique)。
由于 set 存储的是无序集合,所以我们不可以为集合创建索引或执行切片(slice)操作,也没有键(keys)可用来获取集合中元素的值,但是可以判
断一个元素是否在集合中。
访问集合中的值
可以使用len()內建函数得到集合的大小。
thisset = set(['Google', 'Baidu', 'Taobao'])
print(len(thisset)) # 3
可以使用for把集合中的数据一个个读取出来。
thisset = set(['Google', 'Baidu', 'Taobao'])
for item in thisset:
print(item)
# Baidu
# Google
# Taobao
可以通过in或not in判断一个元素是否在集合中已经存在
thisset = set(['Google', 'Baidu', 'Taobao'])
print('Taobao' in thisset) # True
print('Facebook' not in thisset) # True
集合的内置方法
set.add(elmnt)
-> 用于给集合添加元素,如果添加的元素在集合中已存在,则不执行任何操作。
set.update(set)
-> 用于修改当前集合,可以添加新的元素或集合到当前集合中,如果添加的元素在集合中已存在,则该元素只会出现一次,重复的会忽略。
set.remove(item)
-> 用于移除集合中的指定元素。如果元素不存在,则会发生错误。
set.discard(value)
-> 用于移除指定的集合元素。remove() 方法在移除一个不存在的元素时会发生错误,而 discard() 方法不会。
set.pop()
-> 用于随机移除一个元素。
set.intersection(set1, set2 ...)
-> 返回两个集合的交集。
set1 & set2 返回两个集合的交集。
set.intersection_update(set1, set2 ...)
-> 交集,在原始的集合上移除不重叠的元素。
set.union(set1, set2...)
-> 返回两个集合的并集。
set1 | set2
-> 返回两个集合的并集。
set.difference(set)
-> 返回集合的差集。
set1 - set2
-> 返回集合的差集。
set.difference_update(set)
-> 集合的差集,直接在原来的集合中移除元素,没有返回值。
set.symmetric_difference(set)
-> 返回集合的异或。
set1 ^ set2
-> 返回集合的异或。
set.symmetric_difference_update(set)
-> 移除当前集合中在另外一个指定集合相同的元素,并将另外一个指定集合中不同的元素插入到当前集合中。
set.issubset(set)
-> 判断集合是不是被其他集合包含,如果是则返回 True,否则返回 False。
set1 <= set2
-> 判断集合是不是被其他集合包含,如果是则返回 True,否则返回 False。
set.issuperset(set)
-> 用于判断集合是不是包含其他集合,如果是则返回 True,否则返回 False。
set1 >= set2
-> 判断集合是不是包含其他集合,如果是则返回 True,否则返回 False。
set.isdisjoint(set)
-> 用于判断两个集合是不是不相交,如果是返回 True,否则返回 False。
frozenset
Python 提供了不能改变元素的集合的实现版本,即不能增加或删除元素,类型名叫frozenset。需要注意的是frozenset仍然可以进行集合操作,只
是不能用带有update的方法。
frozenset([iterable])
-> 返回一个冻结的集合,冻结后集合不能再添加或删除任何元素。
应用部分应用部分
题目题目1:存在重复元素:存在重复元素
剩余12页未读,继续阅读
weixin_38712279
- 粉丝: 6
- 资源: 949
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0