如何在 Python 中检查集合是否仅包含数字

PythonPythonBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在这个实验中,你将学习如何在 Python 中检查一个集合是否只包含数字。本实验重点在于定义数字集合,包括空集、整数集、浮点数集以及同时包含整数和浮点数的混合集。你还将探索集合如何处理重复值,以确保元素的唯一性。

本实验将引导你创建一个名为 numeric_sets.py 的 Python 文件,添加代码来定义并打印各种集合,然后运行脚本以观察输出结果。你将学习如何使用 set() 构造函数,以及集合如何自动去除重复值,从而了解 Python 中集合的基本特性。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/BasicConceptsGroup(["Basic Concepts"]) python(("Python")) -.-> python/ControlFlowGroup(["Control Flow"]) python(("Python")) -.-> python/DataStructuresGroup(["Data Structures"]) python(("Python")) -.-> python/FunctionsGroup(["Functions"]) python(("Python")) -.-> python/PythonStandardLibraryGroup(["Python Standard Library"]) python/BasicConceptsGroup -.-> python/numeric_types("Numeric Types") python/ControlFlowGroup -.-> python/conditional_statements("Conditional Statements") python/DataStructuresGroup -.-> python/sets("Sets") python/FunctionsGroup -.-> python/build_in_functions("Build-in Functions") python/PythonStandardLibraryGroup -.-> python/data_collections("Data Collections") subgraph Lab Skills python/numeric_types -.-> lab-559559{{"如何在 Python 中检查集合是否仅包含数字"}} python/conditional_statements -.-> lab-559559{{"如何在 Python 中检查集合是否仅包含数字"}} python/sets -.-> lab-559559{{"如何在 Python 中检查集合是否仅包含数字"}} python/build_in_functions -.-> lab-559559{{"如何在 Python 中检查集合是否仅包含数字"}} python/data_collections -.-> lab-559559{{"如何在 Python 中检查集合是否仅包含数字"}} end

定义数字集合

在这一步中,你将学习如何在 Python 中定义包含数字的集合。集合是无序的唯一元素集合,这意味着集合中不能包含重复的值。我们将重点介绍如何创建整数集和浮点数集。

首先,使用 VS Code 编辑器在你的 ~/project 目录下创建一个名为 numeric_sets.py 的 Python 文件。

## Create an empty set
empty_set = set()
print("Empty Set:", empty_set)

## Create a set of integers
integer_set = {1, 2, 3, 4, 5}
print("Integer Set:", integer_set)

## Create a set of floats
float_set = {1.0, 2.5, 3.7, 4.2, 5.9}
print("Float Set:", float_set)

## Create a mixed set (integers and floats)
mixed_set = {1, 2.0, 3, 4.5, 5}
print("Mixed Set:", mixed_set)

将文件保存为 numeric_sets.py 到你的 ~/project 目录下。现在,在终端中使用以下命令运行脚本:

python numeric_sets.py

你应该会看到以下输出:

Empty Set: set()
Integer Set: {1, 2, 3, 4, 5}
Float Set: {1.0, 2.5, 3.7, 4.2, 5.9}
Mixed Set: {1, 2.0, 3, 4.5, 5}

注意,集合中元素的顺序可能与定义时的顺序不同,这是因为集合是无序的。此外,集合会自动去除重复的值。

现在,让我们在 numeric_sets.py 文件中添加更多示例,以展示集合的唯一性:

## Create a set with duplicate values
duplicate_set = {1, 2, 2, 3, 4, 4, 5}
print("Duplicate Set:", duplicate_set)

## Create a set from a list with duplicate values
duplicate_list = [1, 2, 2, 3, 4, 4, 5]
unique_set = set(duplicate_list)
print("Unique Set from List:", unique_set)

保存更改并再次运行脚本:

python numeric_sets.py

你应该会看到以下输出:

Empty Set: set()
Integer Set: {1, 2, 3, 4, 5}
Float Set: {1.0, 2.5, 3.7, 4.2, 5.9}
Mixed Set: {1, 2.0, 3, 4.5, 5}
Duplicate Set: {1, 2, 3, 4, 5}
Unique Set from List: {1, 2, 3, 4, 5}

如你所见,尽管我们尝试使用重复值来创建 duplicate_setunique_set,但它们都只包含唯一的值。

结合使用 all()isinstance()

在这一步中,你将学习如何结合使用 all() 函数和 isinstance() 函数,来检查集合中的所有元素是否都属于特定的数字类型。这在对集合执行操作之前验证其内容时非常有用。

all() 函数会在可迭代对象(如集合)中的所有元素都为真时返回 Trueisinstance() 函数用于检查一个对象是否是指定类或类型的实例。

让我们修改上一步创建的 numeric_sets.py 文件,以包含这些检查。在 VS Code 编辑器中打开 numeric_sets.py,并添加以下代码:

def check_if_all_are_integers(input_set):
  """Checks if all elements in the set are integers."""
  return all(isinstance(x, int) for x in input_set)

def check_if_all_are_floats(input_set):
  """Checks if all elements in the set are floats."""
  return all(isinstance(x, float) for x in input_set)

## Example usage:
integer_set = {1, 2, 3, 4, 5}
float_set = {1.0, 2.5, 3.7, 4.2, 5.9}
mixed_set = {1, 2.0, 3, 4.5, 5}

print("Are all elements in integer_set integers?", check_if_all_are_integers(integer_set))
print("Are all elements in float_set floats?", check_if_all_are_floats(float_set))
print("Are all elements in mixed_set integers?", check_if_all_are_integers(mixed_set))
print("Are all elements in mixed_set floats?", check_if_all_are_floats(mixed_set))

保存文件并使用以下命令运行:

python numeric_sets.py

你应该会看到以下输出:

Are all elements in integer_set integers? True
Are all elements in float_set floats? True
Are all elements in mixed_set integers? False
Are all elements in mixed_set floats? False

输出结果表明,integer_set 只包含整数,float_set 只包含浮点数,而 mixed_set 包含整数和浮点数的混合,因此对整数和浮点数的检查都返回 False

现在,让我们添加一个函数来检查所有元素是否为整数或浮点数(即数字类型):

def check_if_all_are_numeric(input_set):
  """Checks if all elements in the set are either integers or floats."""
  return all(isinstance(x, (int, float)) for x in input_set)

print("Are all elements in mixed_set numeric?", check_if_all_are_numeric(mixed_set))

string_set = {"a", "b", "c"}
print("Are all elements in string_set numeric?", check_if_all_are_numeric(string_set))

保存文件并再次运行:

python numeric_sets.py

你应该会看到以下输出:

Are all elements in integer_set integers? True
Are all elements in float_set floats? True
Are all elements in mixed_set integers? False
Are all elements in mixed_set floats? False
Are all elements in mixed_set numeric? True
Are all elements in string_set numeric? False

这展示了如何使用 all()isinstance() 来验证集合中元素的类型。

处理空集合

在这一步中,你将学习在使用 all()isinstance() 函数时如何处理空集合。空集合是一种特殊情况,因为它们不包含任何元素。了解这些函数在处理空集合时的行为,对于编写健壮的代码至关重要。

让我们来看看使用 all() 函数处理空集合时会发生什么。如果可迭代对象中的所有元素都为真,all() 函数会返回 True。由于空集合没有元素,因此可以认为它的“所有”元素都是真的,仅仅是因为没有元素为假。

让我们修改 numeric_sets.py 文件来演示这一点。在 VS Code 编辑器中打开 numeric_sets.py,并添加以下代码:

def check_if_all_are_integers(input_set):
  """Checks if all elements in the set are integers."""
  return all(isinstance(x, int) for x in input_set)

## Example with an empty set:
empty_set = set()
print("Is empty_set all integers?", check_if_all_are_integers(empty_set))

保存文件并使用以下命令运行:

python numeric_sets.py

你应该会看到以下输出:

Is empty_set all integers? True

这个结果一开始可能看起来有悖直觉,但它与 all() 函数的定义是一致的。

现在,让我们考虑一种情况,你希望对空集合进行特殊处理。你可以在使用 all() 函数之前检查集合是否为空:

def check_if_all_are_integers_safe(input_set):
  """Checks if all elements in the set are integers, handling empty sets explicitly."""
  if not input_set:
    return False  ## Or True, depending on your desired behavior for empty sets
  return all(isinstance(x, int) for x in input_set)

empty_set = set()
print("Is empty_set all integers (safe)?", check_if_all_are_integers_safe(empty_set))

integer_set = {1, 2, 3}
print("Is integer_set all integers (safe)?", check_if_all_are_integers_safe(integer_set))

保存文件并再次运行:

python numeric_sets.py

你应该会看到以下输出:

Is empty_set all integers (safe)? False
Is integer_set all integers (safe)? True

在这个例子中,check_if_all_are_integers_safe 函数对空集合返回 False。你可以修改 if not input_set: 代码块中的返回值,以满足你的特定需求。显式处理空集合可以避免代码中出现意外的行为。

总结

在这个实验中,你学习了如何在 Python 中定义包含数字的集合,包括空集合、整数集合、浮点数集合,以及同时包含整数和浮点数的混合集合。你还了解到集合是无序的集合,并且会自动去除重复的值。

本实验展示了如何直接创建集合,以及如何从包含重复值的列表创建集合,突出了集合仅保留唯一元素的特性。这些示例让你对集合如何处理不同的数字类型以及消除冗余有了实际的理解。