集合(set)

4.6 集合(set)

集合是由非重复元素组成的无序容器。集合中的元素不能重复,即使将相同的元素添加到集合中,也只保留一个元素。由于集合的这一性质,通常可以使用该集合来删除重复项。

[En]

A collection is an unordered container made up of non-repeating elements. The elements in the collection cannot be repeated, and even if the same element is added to the collection, only one will be retained. Because of this nature of the collection, it is generally possible to use the collection to remove duplicates.

集合中不能添加可变对象(不可哈希),因为无法判断两个可变对象是否相同,也就无法保证集合的内部不会有重复元素。
集合中的元素是无序的,我们通过print可以显示集合内的元素,但是显示的结果并非是集合中的元素的顺序。这意味着集合不能通过索引或切片获取内部的元素。

列表在创建的时候用 {}做标识。内部的元素用逗号进行分隔。

st = {1} # 仅一个元素的集合
st2 = {‘a’, ‘b’, ‘c’} # 集合中存放的全是字符
st3 = {1, ‘a’, ‘中’} # 集合中存放混合数据
st4 = {‘red’, ‘green’, ‘blue’} # 集合中存放的全是字符串

{x for x in range(5)}

{x * x for x in range(10)}

{x*x for x in range(10) if x % 3 == 0}

set函数可以将一个 可迭代对象转换成集合。如果可迭代对象中有重复的元素则会自动去除保留一个。

print(set(‘Pythonn’)) # 只会保留一个n

{‘P’, ‘y’, ‘t’, ‘h’, ‘o’, ‘n’}

set() # 创建空的集合
{}

注意:不能通过st = {}创建空集合,因为这样会创建空的字典。

set函数可以创建一个普通的集合(可以修改),但是通过frozenset函数创建的集合是一个不可修改的集合,创建后就不能再修改里面的元素,包括增加、删除、清空等。

st = frozenset(‘python’)
st

frozenset({‘o’, ‘t’, ‘p’, ‘h’, ‘y’, ‘n’})

st.add(‘l’)

Traceback (most recent call last):
File “C:\Program Files\Python3102\lib\code.py”, line 90, in runcode
exec(code, self.locals)
File “”, line 1, in
AttributeError: ‘frozenset’ object has no attribute ‘add’

参见 可迭代对象章节中的 可迭代对象的遍历

参见可迭代对象中的 成员资格检查

st1 = {1, 2, 3, 4, 5}
st2 = {2, 4, 6, 8, 10}
st1 | st2

st1 = {1, 2, 3, 4, 5}
st2 = {2, 4, 6, 8, 10}
st1 & st2

st1 = {1, 2, 3, 4, 5}
st2 = {2, 4, 6, 8, 10}
st1 – st2

st1 = {1, 2, 3, 4, 5}
st2 = {2, 4, 6, 8, 10}
st1 – st2

A < B # 返回A是否是B的子集(同:A.issubset(B))
A > B # 返回A是否是B的超集(同:A.issuperset(B))

&#x63CF;&#x8FF0;
为集合添加元素
&#x793A;&#x4F8B;

st = {1, 2}
st.add(3)
st

&#x63CF;&#x8FF0;
将新元素或集合添加到当前集合。

[En]

Add a new element or collection to the current collection.

&#x793A;&#x4F8B;

st1 = {1, 2, 3, 4, 5}
st2 = {2, 4, 6, 8, 10}
st1.update(st2)
st1

&#x63CF;&#x8FF0;
指定删除集合中的元素。要删除的元素必须在目标集合中存在,否则引发KeyError异常。
&#x793A;&#x4F8B;

st1 = {1, 2, 3}
st1.remove(2)
st1

&#x63CF;&#x8FF0;
删除集合中的指定元素。如果要删除的元素不在目标集合中,则不起作用。

[En]

Deletes the specified element in the collection. It has no effect if the element you want to delete is not in the target collection.

&#x793A;&#x4F8B;

st1 = {1, 2, 3, 4, 5}
st1.discard(2)
st1

&#x63CF;&#x8FF0;
随机删除集合中的元素

[En]

Randomly delete an element in the collection

&#x793A;&#x4F8B;

st1 = {1, 2, 3}
st1.pop()

st1

&#x63CF;&#x8FF0;
移除集合中的所有元素
&#x793A;&#x4F8B;

st = {1, 2}
st.clear()
st

&#x63CF;&#x8FF0;
返回两个集合的并集。
&#x793A;&#x4F8B;

st1 = {1, 2, 3, 4, 5}
st2 = {2, 4, 6, 8, 10}
st1.union(st2)

&#x63CF;&#x8FF0;
返回多个集合的交集。intersection不修改原对象内容,直接返回结果,而intersection_update会修改原对象内容。
&#x793A;&#x4F8B;

st1 = {1, 2, 3, 4, 5}
st2 = {2, 4, 6, 8, 10}
st1.intersection(st2)

&#x63CF;&#x8FF0;
返回多个集合的差集。difference不修改原对象内容,直接返回结果,而difference_update会修改原对象内容。
&#x793A;&#x4F8B;

st1 = {1, 2, 3}
st2 = {2, 4, 6}
st1.difference(st2)

&#x63CF;&#x8FF0;
返回两个集合中不重复的元素的集合(对称差)。symmetric_difference不修改原对象内容,直接返回结果,而symmetric_difference_update会修改原对象内容。
&#x793A;&#x4F8B;

st1 = {1, 2, 3, 4, 5}
st2 = {2, 4, 6, 8, 10}
st1.symmetric_difference(st2)

&#x63CF;&#x8FF0;
判断前者集合是否是后者集合的子集(超集),如果为真,则返回True,否则返回False。
&#x793A;&#x4F8B;

st1 = {1, 2}
st2 = {1, 2, 4}
st1.issubset(st2)

True

&#x63CF;&#x8FF0;
判断两个集合是否不相交(即不含有相同元素),如果不相交则返回True,否则返回False。
&#x793A;&#x4F8B;

st1 = {1, 2}
st2 = {2, 4}
st3 = {3, 6}
st1.isdisjoint(st2)
st1.isdisjoint(st3)

False
True

&#x63CF;&#x8FF0;
拷贝一个集合
&#x793A;&#x4F8B;

st = {1, 2, 3}
st2 = st.copy()
st2

Original: https://www.cnblogs.com/sibide/p/16390611.html
Author: crleep
Title: 集合(set)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/498767/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球