每种语言都有基本的数据类型,比如整型、浮点型、字符串、列表等,但是小编今天主要记录列表数据类型。
tmpdir__17_9_7_15_06_52.gif
集合(set/frozenset)
集合的特点:无序的,不可随机访问,不可重复(很重要);
可以有交集 并集 补集。
集合的分类:集合分为可变的集合(set)、不可以变集合(frozenset)
可变的集合才会有 增删改查,不可变集合没有;
类型中列表、字典、字符串都是可变集合, 元祖是不可变集合
1. 集合的定义
方法一:直接写大括号
s = {435, 45, 5}
print(s, type(s))
方法二:set(Iterable,可迭代对象)
s = set([34, 56, 7])
print(s, type(s))
s1 = frozenset((1, 3, 5))
s1 = frozenset([1, 3, 5])
s1 = frozenset({'name': 'lzb', 'age': 18})
方法三:集合推导式
s = set(x * x for x in range(0, 4))
s = frozenset(x * x for x in range(0, 6))
print(s, type(s))
2. 集合的去重
集合新增的数必须是可哈希的(不可变的)
list1 = [1, 3, 4, 5, 6, 2, 1]
set1 = set(list1)
result = list(set1)
print(result)
3. 单一集合的操作增、删、改、查
3.1 新增
s = {1, 2, 3}
s.add(4)
3.2 删除
# remove 没有这个元素 报错
print(s.remove(12))
# discard 没有这个元素 不报错 返回 None
print(s.discard(12))
# pop 随机删除一个元素 空集合删除会报错
print(s.pop())
print(s.pop())
print(s.pop())
print(s.pop())
# clear 清空集合 返回 None
print(s.clear())
3.3 集合的查询,集合不可以修改
# 集合的遍历 方式一 for in
for v in s:
print(v)
# 集合的遍历 方式二 迭代器
its = iter(s)
print(next(its))
print(next(its))
print(next(its))
4. 集合之间的操作交集 并集 补集
4.1 intersection(Iterable) 求交集 可变与不可变交集时候 以intersection左侧为基准
# intersection_update 求交集 只有不可变才有 会修改调用者
s1 = {1, 2, 3, 4, 5}
s2 = {4, 5, 6}
result = s1.intersection(s2)
print(result, type(result))
s1 = frozenset([1, 2, 3, 4, 5])
s2 = {4, 5, 6}
result = s2 & s1
print(result, type(result))
s1 = frozenset([1, 2, 3, 4, 5])
s2 = {4, 5, 6}
s2.intersection_update(s1)
print(s2, type(s2))
s1 = {1, 2, 3, 4, 5}
print(s1.intersection([1, 2, 3]))
4.2 union(Iterable) 求并集
# update 求交集 只有不可变才有 会修改调用者
s1 = {1, 2, 3, 4, 5}
s2 = {4, 5, 6}
print(s1.union(s2))
s1 = {1, 2, 3, 4, 5}
s2 = {4, 5, 6}
print(s1 | s2)
4.3 difference(Iterable) 求补集 差集
# difference_update 求补集 差集 只有不可变才有 会修改调用者
s1 = {1, 2, 3, 4, 5}
s2 = {4, 5, 6}
print(s1.difference(s2))
s1 = {1, 2, 3, 4, 5}
s2 = {4, 5, 6}
print(s1 - s2)
4.4 判断 判断集合是否包含
# isdisjoint 是否不相交
s1 = {1, 2, 3, 4, 5}
s2 = {4, 5, 6}
print(s1.isdisjoint(s2))
# issuperset 是否全包含 s1 包含 s2
s1 = {1, 2, 3, 4, 5}
s2 = {4, 5}
print(s1.issuperset(s2))
# issuperset 是否全包含 s2 是 s1 的子集
s1 = {1, 2, 3, 4, 5}
s2 = {4, 5}
print(s2.issubset(s1))
最后赠言
学无止境,学习Python的伙伴可以多多交流
网友评论