详解Python 集合和多重集合

  • Post category:Python

下面是关于Python集合和多重集合的使用攻略。

集合(Set)

定义集合

在Python中,集合是一种无序,不重复的数据集合。可以通过花括号 {} 或者使用 set() 函数来创建一个空的集合。

# 使用{}定义一个集合
my_set = {1,2,3}
print(my_set)

# 使用set()函数创建集合
my_set2 = set()
print(my_set2)

输出结果:

{1, 2, 3}
set()

添加元素

我们可以使用 .add() 方法来向一个集合中添加元素,也可以使用 update() 方法向集合中添加多个元素。需要注意的是,当我们向集合中添加已经存在的元素时,集合不会发生变化。

my_set = {1,2,3}

# 向集合中添加单个元素
my_set.add(4)
print(my_set)

# 向集合中添加多个元素
my_set.update([5,6,7])
print(my_set)

# 向集合中添加已存在的元素
my_set.add(1)
print(my_set)

输出结果:

{1, 2, 3, 4}
{1, 2, 3, 4, 5, 6, 7}
{1, 2, 3, 4, 5, 6, 7}

删除元素

我们可以使用 .remove() 方法删除集合中的元素。如果要删除的元素不存在于集合中,则会抛出一个 KeyError 异常。如果不想抛出异常,可以使用 .discard() 方法,这个方法不会抛出异常。

my_set = {1,2,3}

# 删除单个元素
my_set.remove(2)
print(my_set)

# 删除不存在的元素
# my_set.remove(5)  # 如果取消本行的注释,则会抛出KeyError异常

# 不会抛出异常的删除方法
my_set.discard(5)
print(my_set)

输出结果:

{1, 3}
{1, 3}

其他常用方法

除了上面的 .add().update().remove().discard() 方法之外,集合对象还提供了其他常用的方法。

  • .clear() 方法清空集合。
  • .union()| 方法返回两个集合的并集。
  • .intersection()& 方法返回两个集合的交集。
  • .difference()- 方法返回两个集合的差集。
  • .symmetric_difference()^ 方法返回两个集合的对称差集。
  • .issubset() 方法检查一个集合是否是另一个集合的子集。
  • .issuperset() 方法检查一个集合是否是另一个集合的父集。
set1 = {1,2,3}
set2 = {3,4,5}

# 并集
print(set1.union(set2))
print(set1 | set2)

# 交集
print(set1.intersection(set2))
print(set1 & set2)

# 差集
print(set1.difference(set2))
print(set1 - set2)

# 对称差集(在set1和set2中存在,但是不在两个集合的交集中)
print(set1.symmetric_difference(set2))
print(set1 ^ set2)

# 检查集合关系
print(set1.issubset(set2))
print(set2.issuperset(set1))

输出结果:

{1, 2, 3, 4, 5}
{1, 2, 3, 4, 5}
{3}
{3}
{1, 2}
{1, 2}
{1, 2, 4, 5}
{1, 2, 4, 5}
False
False

多重集合(Multiset)

多重集合是一种可以拥有重复元素的集合。Python标准库中提供了两种数据结构可以实现多重集合:collections.Countercollections.defaultdict。下面我们来分别介绍这两种数据结构。

collections.Counter

collections.Counter 是Python标准库中提供的一个计数器对象,用来统计可迭代对象中各个元素出现的次数。我们可以将一个列表、元组、字符串、字典等可迭代对象转换为一个计数器对象,然后就可以使用计数器对象的各种方法进行统计和操作。计数器对象提供了一些常用的方法,例如 .most_common() 方法可以返回计数器对象中出现频率最高的元素列表。

from collections import Counter

my_list = [1, 2, 3, 3, 3, 4, 5, 5]

# 将列表转换为计数器对象
my_counter = Counter(my_list)

# 统计各个元素出现的次数
print(my_counter)

# 计算总数
print(sum(my_counter.values()))

# 返回出现频率最高的元素列表
print(my_counter.most_common(2))

输出结果:

Counter({3: 3, 5: 2, 1: 1, 2: 1, 4: 1})
12
[(3, 3), (5, 2)]

collections.defaultdict

collections.defaultdict 是Python标准库中提供的一个字典对象,和普通的字典相比,它可以自动为不存在的键设置一个默认值。我们可以将一个默认的工厂函数传递给 defaultdict,当我们查询一个不存在的键时,会自动调用这个工厂函数返回一个默认的值。对于多重集合,我们可以将 int 类型的工厂函数传给 defaultdict,这样当我们查询一个不存在的键时,会自动返回0。

from collections import defaultdict

my_list = [1, 2, 3, 3, 3, 4, 5, 5]

# 初始化一个默认值为0的defaultdict对象
my_dict = defaultdict(int)

# 将列表中的元素添加到defaultdict中
for item in my_list:
    my_dict[item] += 1

# 输出结果
print(my_dict)

输出结果:

defaultdict(<class 'int'>, {1: 1, 2: 1, 3: 3, 4: 1, 5: 2})

以上就是关于Python集合和多重集合使用方法的完整攻略,希望能对你有所帮助。