Как проверить, содержит ли множество только числа в Python

PythonPythonBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом практическом занятии (лабораторной работе) вы научитесь проверять, содержит ли множество только числа на Python. Лабораторная работа сосредоточена на определении числовых множеств, включая пустые множества, множества целых чисел, множества чисел с плавающей запятой и смешанные множества, содержащие как целые числа, так и числа с плавающей запятой. Вы также узнаете, как множества обрабатывают дубликаты значений, обеспечивая уникальность.

В рамках лабораторной работы вас научат создавать файл Python с именем numeric_sets.py, добавлять код для определения и вывода различных множеств, а также запускать скрипт для наблюдения за выводом. Вы научитесь использовать конструктор 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. Множества представляют собой неупорядоченные коллекции уникальных элементов. Это означает, что множество не может содержать дубликаты значений. Мы сосредоточимся на создании множеств целых чисел и чисел с плавающей запятой.

Сначала создадим файл Python с именем numeric_sets.py в каталоге ~/project с помощью редактора VS Code.

## 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_set, и unique_set содержат только уникальные значения, даже несмотря на то, что мы пытались создать их с дубликатами значений.

Использование функции all() вместе с isinstance()

На этом этапе вы научитесь использовать функцию all() в сочетании с функцией isinstance() для проверки, являются ли все элементы множества определенного числового типа. Это полезно для валидации содержимого множества перед выполнением операций над ним.

Функция all() возвращает True, если все элементы итерируемого объекта (например, множества) являются истинными. Функция isinstance() проверяет, является ли объект экземпляром указанного класса или типа.

Давайте модифицируем файл numeric_sets.py, который вы создали на предыдущем этапе, чтобы включить эти проверки. Откройте numeric_sets.py в редакторе VS Code и добавьте следующий код:

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, чтобы продемонстрировать это. Откройте numeric_sets.py в редакторе VS Code и добавьте следующий код:

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, включая пустые множества, множества целых чисел, множества чисел с плавающей запятой и смешанные множества, содержащие как целые числа, так и числа с плавающей запятой. Вы также увидели, что множества представляют собой неупорядоченные коллекции и автоматически удаляют дубликаты значений.

В практическом занятии показано, как создавать множества напрямую и из списков с дубликатами значений, подчеркивая свойство множества хранить только уникальные элементы. Примеры дали практическое понимание того, как множества обрабатывают различные числовые типы и устраняют избыточность.