Python 简明教程

Python - Remove Set Items

Remove Set Items

移除 set 项意味着从集合中删除元素。在 Python 中,集合是可变的、无序的唯一元素集合,并且有几种方法可根据不同条件从集合中删除项。

我们可以使用 remove()、discard()、pop()、clear() 和集合解析等方法在 Python 中删除集合项。每种方法都提供了基于特定条件或标准从集合中删除元素的不同方式。

Remove Set Item Using remove() Method

Python 中的 remove() 方法用于从集合中删除指定项的第一个匹配项。

我们可以通过指定要从集合中删除的元素来使用 remove() 方法删除集合项。如果集合中存在该元素,则将其删除。但是,如果找不到该元素,则 remove() 方法将引发 KeyError 异常。

Example

在下面的示例中,我们使用 remove() 方法从集合“my_set”中删除元素“Physics”−

my_set = {"Rohan", "Physics", 21, 69.75}
print ("Original set: ", my_set)

my_set.remove("Physics")
print ("Set after removing: ", my_set)

它将生成如下输出:

Original set:  {21, 69.75, 'Rohan', 'Physics'}
Set after removing:  {21, 69.75, 'Rohan'}

Example

如果要删除的元素在集合中未找到,则 remove() 方法将引发 KeyError 异常−

my_set = {"Rohan", "Physics", 21, 69.75}
print ("Original set: ", my_set)

my_set.remove("PHP")
print ("Set after removing: ", my_set)

我们得到如下所示的错误−

Original set:  {'Physics', 21, 69.75, 'Rohan'}
Traceback (most recent call last):
  File "/home/cg/root/664c365ac1c3c/main.py", line 4, in <module>
    my_set.remove("PHP")
KeyError: 'PHP'

Remove Set Item Using discard() Method

集合类中的 discard() 方法类似于 remove() 方法。唯一不同的是,即使要删除的对象尚未存在于集合集中,它也不会引发错误。

Example

在此示例中,我们使用 discard() 方法从集合中删除一个元素,无论该元素是否存在−

my_set = {"Rohan", "Physics", 21, 69.75}
print ("Original set: ", my_set)

# removing an existing element
my_set.discard("Physics")
print ("Set after removing Physics: ", my_set)

# removing non-existing element
my_set.discard("PHP")
print ("Set after removing non-existent element PHP: ", my_set)

以下是上面代码的输出: -

Original set:  {21, 'Rohan', 69.75, 'Physics'}
Set after removing Physics:  {21, 'Rohan', 69.75}
Set after removing non-existent element PHP:  {21, 'Rohan', 69.75}

Remove Set Item Using pop() Method

我们还可以使用 pop() 方法删除集合项,通过从集合中删除并返回一个任意元素来实现此操作。如果集合为空,则 pop() 方法将引发 KeyError 异常。

Example

在下例中,我们定义了一个包含元素“1”到“5”的集合,并使用 pop() 方法从中删除了一个任意元素 −

# Defining a set
my_set = {1, 2, 3, 4, 5}

# removing and returning an arbitrary element from the set
removed_element = my_set.pop()

# Printing the removed element and the updated set
print("Removed Element:", removed_element)
print("Updated Set:", my_set)

我们得到了如下输出 −

Removed Element: 1
Updated Set: {2, 3, 4, 5}

Example

如果我们尝试从空集合中删除元素,pop() 方法将引发 KeyError 异常 −

# Defining an empty set
empty_set = set()

# Removing an arbitrary element from the empty set
removed_element = empty_set.pop()

产生的错误如下所示 −

Traceback (most recent call last):
  File "/home/cg/root/664c69620cd40/main.py", line 5, in <module>
removed_element = empty_set.pop()
KeyError: 'pop from an empty set'

Remove Set Item Using clear() Method

set 类中的 clear() 方法删除 set 对象中的所有项,留空集合。

我们可以使用 clear() 方法删除所有元素来删除集合项,使其有效地变为空。

Example

在以下示例中,我们定义了一个包含元素“1”到“5”的集合,然后使用 clear() 方法从集合中删除所有元素 −

# Defining a set with multiple elements
my_set = {1, 2, 3, 4, 5}

# Removing all elements from the set
my_set.clear()
# Printing the updated set
print("Updated Set:", my_set)

它将生成如下输出:

Updated Set: set()

Remove Items Existing in Both Sets

您可以使用 difference_update() 方法或减法运算符 (-=) 删除两个集合中存在的项(即两个集合的交集)。这将从原始集合中删除两个集合中都存在的元素。

Example

在此示例中,我们定义了两个集合“s1”和“s2”,然后使用 difference_update() 方法从“s1”中删除也存在于“s2”中的元素−

s1 = {1,2,3,4,5}
s2 = {4,5,6,7,8}
print ("s1 before running difference_update: ", s1)
s1.difference_update(s2)
print ("s1 after running difference_update: ", s1)

执行上面的代码后,我们得到以下输出: -

s1 before running difference_update: {1, 2, 3, 4, 5}
s1 after running difference_update: {1, 2, 3}
set()

Remove Items Existing in Either of the Sets

要删除存在于两个集合中的项,可以使用对称差运算。两个集合之间的对称差产生一个集合,该集合包含在两个集合中的元素,但不在其交集中的元素。

在 Python 中,可以使用 ^ 运算符或 symmetric_difference() 方法执行对称差运算。

Example

在以下示例中,我们定义了两个集合“set1”和“set2”。然后我们使用对称差运算符 (^) 创建一个新集合“result_set”,其中包含存在于“set1”或“set2”但不同时存在于两个集合中的元素 −

set1 = {1, 2, 3, 4}
set2 = {3, 4, 5, 6}

# Removing items that exist in either set
result_set = set1 ^ set2
print("Resulting Set:", result_set)

以下是上面代码的输出: -

Resulting Set: {1, 2, 5, 6}

Remove Uncommon Set Items

您可以使用 intersection_update() 方法删除两个集合之间的非共同元素。两个集合的交集产生一个只包含两个集合中存在的元素的集合。

要仅保留原始集合之一中的公共元素并删除非公共元素,您可以使用其交集更新集合。

Example

在此示例中,我们定义了两个集合“set1”和“set2”。然后我们使用 intersection_update() 方法修改“set1”,使其仅包含也存在于“set2”中的元素 −

set1 = {1, 2, 3, 4}
set2 = {3, 4, 5, 6}

# Keeping only common items in set1
set1.intersection_update(set2)
print("Set 1 after keeping only common items:", set1)

以上代码的输出如下所示 −

Set 1 after keeping only common items: {3, 4}

The intersection() Method

set 类中的 intersection() 方法与 intersection_update() 方法类似,不过它会返回一个仅包含现有集合中公有项的新集合对象。

Syntax

以下是 intersection() 方法的基本语法 −

set.intersection(obj)

其中, obj 是一个集合对象。

Return value

intersection() 方法返回一个集合对象,其中仅保留它本身和 obj 中的公有项。

Example

在以下示例中,我们定义了两个集合“s1”和“s2”,然后使用 intersection() 方法创建一个新集合“s3”,其中包含“s1”和“s2”共有的元素 −

s1 = {1,2,3,4,5}
s2 = {4,5,6,7,8}
print ("s1: ", s1, "s2: ", s2)
s3 = s1.intersection(s2)
print ("s3 = s1 & s2: ", s3)

它将生成如下输出:

s1: {1, 2, 3, 4, 5} s2: {4, 5, 6, 7, 8}
s3 = s1 & s2: {4, 5}

Symmetric Difference Update of Set Items

两个集合之间的对称差集是所有非公有项的集合,排除了公有元素。symmetric_difference_update() 方法将集合更新为它本身与其作为参数传递的集合之间的对称差集。

Example

在下例中,我们定义了两个集合“s1”和“s2”,然后使用 symmetric_difference_update() 方法修改“s1”,使其包含存在于“s1”或“s2”但不同时存在于两个集合中的元素−

s1 = {1,2,3,4,5}
s2 = {4,5,6,7,8}
print ("s1: ", s1, "s2: ", s2)
s1.symmetric_difference_update(s2)
print ("s1 after running symmetric difference ", s1)

获得的结果如下所示 −

s1: {1, 2, 3, 4, 5} s2: {4, 5, 6, 7, 8}
s1 after running symmetric difference {1, 2, 3, 6, 7, 8}

Symmetric Difference of Set Items

set 类中的 symmetric_difference() 方法与 symmetric_difference_update() 方法类似,不过它会返回一个新集合对象,其中包含来自两个集合的全部项目,减去公有项目。

Example

在以下示例中,我们定义了两个集合“s1”和“s2”。然后我们使用 symmetric_difference() 方法创建一个新集合“s3”,其中包含存在于“s1”或“s2”但不同时存在于两个集合中的元素 −

s1 = {1,2,3,4,5}
s2 = {4,5,6,7,8}
print ("s1: ", s1, "s2: ", s2)
s3 = s1.symmetric_difference(s2)
print ("s1 = s1^s2 ", s3)

它将生成如下输出:

s1: {1, 2, 3, 4, 5} s2: {4, 5, 6, 7, 8}
s1 = s1^s2 {1, 2, 3, 6, 7, 8}