В этой статье рассмотрим, как в массиве чисел преобразовать все элементы, являющиеся числами с плавающей точкой (float), и имеющие ".00" после точки, в целые числа (integer).
Имеется массив, содержащий различные типы данных, включая числа с плавающей точкой. Наша задача - найти среди этих чисел те, которые имеют вид X.00, где X - любое целое число, и преобразовать их в целые числа. Например, 5.00 должно стать 5.
Рассмотрим решение на языке Python, поскольку он часто используется для работы с данными.
Это, пожалуй, самый элегантный и Pythonic способ.
my_array = [1.00, 2, 3.14, 4.00, "hello", 5.00, 6]
new_array = [int(x) if isinstance(x, float) and str(x).endswith(".00") else x for x in my_array]
print(new_array) # Output: [1, 2, 3.14, 4, 'hello', 5, 6]
isinstance(x, float): Проверяет, является ли элемент x типом float.str(x).endswith(".00"): Преобразует число x в строку и проверяет, заканчивается ли оно на ".00".int(x): Преобразует x в целое число, если оба условия выше выполнены.else x: Если хотя бы одно из условий не выполнено, элемент x остается без изменений.[... for x in my_array]: List comprehension создает новый список, перебирая элементы исходного массива.for и enumerate для изменения массива "на месте"Если необходимо изменить исходный массив, а не создавать новый, можно использовать цикл for с функцией enumerate.
my_array = [1.00, 2, 3.14, 4.00, "hello", 5.00, 6]
for i, x in enumerate(my_array):
if isinstance(x, float) and str(x).endswith(".00"):
my_array[i] = int(x)
print(my_array) # Output: [1, 2, 3.14, 4, 'hello', 5, 6]enumerate(my_array): Возвращает кортежи вида (индекс, значение) для каждого элемента массива.my_array[i] = int(x): Заменяет значение элемента по индексу i на его целочисленную версию.NumPyЕсли вы работаете с большими массивами числовых данных, NumPy может быть более эффективным.
import numpy as np
my_array = np.array([1.00, 2, 3.14, 4.00, 5.00, 6])
# Создаем маску для элементов, которые нужно преобразовать
mask = np.isclose(my_array % 1, 0) & (my_array % 1 != 0)
# Применяем преобразование
my_array[mask] = my_array[mask].astype(int)
print(my_array) # Output: [1. 2. 3.14 4. 5. 6.] # numpy делает все float, если есть хотя бы один float в массивеnp.array(...): Преобразует список в NumPy массив.my_array % 1: Вычисляет остаток от деления каждого элемента на 1. Если остаток равен 0, значит число целое.np.isclose(my_array % 1, 0): np.isclose используется для сравнения чисел с плавающей точкой из-за возможных проблем с точностью.(my_array % 1 != 0): Дополнительная проверка, чтобы убедиться, что число было именно float с ".00", а не изначально int.my_array[mask] = my_array[mask].astype(int): Применяет преобразование только к элементам, для которых маска имеет значение True.astype(int): Преобразует тип данных элементов массива в целые числа.NumPy преобразует все элементы массива в один тип данных. Если исходный массив содержит строки или другие типы данных, возникнет ошибка. Также, если в массиве присутствует хотя бы одно число с плавающей точкой, то NumPy преобразует все числа в float.В зависимости от конкретной задачи и используемой библиотеки, могут существовать и другие способы решения этой проблемы.