Как из list сделать int python
Перейти к содержимому

Как из list сделать int python

  • автор:

Перевод списка строк в список чисел

Во многих языках когда используется цикл вида for-in элементы оисходной последовательности являются неизменяемыми. То есть вы имеете дело с копиями элементов. Я не знаю Python, но, думаю, здесь имеет место тоже самое.

18 окт 2015 в 21:13
Возможно, вам будет полезен этот ответ
18 окт 2015 в 22:50

5 ответов 5

Сортировка: Сброс на вариант по умолчанию

Наиболее идиоматический и идеологически выверенный способ:

result = [int(item) for item in a] 

Для любителей функционального стиля:

result = list(map(int, a)) 

Тут функция map применяет функцию int к каждому элементу объекта a , потом результат преобразовывается в список.

Такой вариант считается менее «питоничным», но тоже имеет право на существование (как минимум, во многих случаях запись через map получается более компактной, чем вариант через списочное выражение).

По поводу вашего первого варианта: когда вы пишете for el in a , то каждый раз в цикле в el записывается ссылка на элемент списка. Но когда вы пишете el = int(el) , то в переменную el просто записывается другая ссылка, сам элемент списка не меняется.

Как понять, что это именно ссылка, а не копия элемента? Вот пример, как при помощи вызова метода элемента списка меняется сам элемент:

>>> a = [[], [], []] >>> for el in a: el.append(1) >>> a [[1], [1], [1]] 

По поводу вашего ответа, перебор со счетчиком (если он вам вдруг действительно понадобится) на Python правильнее (проще и приятнее, без всяких len вложенных в range) делать через enumerate:

for i, item in enumerate(a): a[i] = int(item) 

Отслеживать
ответ дан 18 окт 2015 в 23:22
48.6k 17 17 золотых знаков 56 56 серебряных знаков 100 100 бронзовых знаков

Различные способы выполнить это преобразование:

    Изменяя непосредственно элементы массива

for i, elem in enumerate(array): array[i] = int(elem) 
array = [int(elem) for elem in array] 
array = list(map(int, array)) 

Вот более подробное объяснение происходящего:

Для начала вспомним, что все переменные в Python являются ссылками на объекты.

Пусть у нас будет массив array со следующим содержимым:

array = ['10', '11', '12'] 

Вот как это будет представляться в памяти в Python ( idN — это адрес объекта в памяти):

визуализация массива

Заметьте, что строки не хранятся напрямую в списке, они хранятся снаружи, а в списке есть указатели на них.

Когда вы перебираете значения в цикле, например,

for elem in array: elem = int(elem) 

На каждой итерации переменная elem просто будет указывать на текущее число массива array .

Например, на первой итерации:

elem указывает на первую строку

Если мы попробуем присвоить что-то переменной elem , то мы просто заменим то, на что она будет указывать на текущей итерации цикла:

elem указывает на новый объект

Заметьте, что в массиве при этом ссылка не меняется, и нулевой элемент как указывал на строку «10» , так и продолжает на неё указывать:

array[0] указывает всё ещё на старый объект

Т.е. наша задача на самом деле заключается в том, чтобы заменить ссылку, хранящуюся в списке array на новую, т.е. в нашей визуализации на id5 .

Чтобы это сделать, нам нужно получить доступ на запись в конкретную ячейку списка. Список позволяет сделать это через доступ по индексу. Напишем следующий код (подобный которому как раз используется вами в собственном ответе):

array = ['10', '11', '12'] for i in range(len(array)): old_value = array[i] new_value = int(old_value) array[i] = new_value 

Я расписал в несколько строк для наглядности.

Здесь на первой итерации цикла мы получаем переменную i , хранящую не ссылку на строку, а позицию в списке array , в которой нам нужно заменить ссылку:

переменная i хранит число 0, а не ссылку на строку

Далее получаем строку, хранящуюся по этому индексу для того, чтобы преобразовать её в число (здесь она сохраняется в отдельной переменной, в вашем коде это будет временный объект):

old_value = array[i] 

old_value указывает на строку в списке

Имея значение элемента, мы можем выполнить над ним интересующую нас операцию. Снова сохраним его в отдельной переменной.

new_value = int(old_value) 

new_value указывает на полученное число

Имея новое значение и индекс, по которому его нужно сохранить в нашем списке, у нас не остаётся проблем, чтобы завершить выполнение итерации, сохранив новое значение в нужном месте:

array[i] = new_value 

изменили первое значение в списке

Таким образом и производится изменение значений массива.

Приведу для сравнения краткую запись этого кода:

for i in range(len(array)): array[i] = int(array[i]) 

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

Если скомбинировать оба этих способа, можно получить немного более удобную запись этого же преобразования:

for i, elem in enumerate(array): array[i] = int(elem) 

Функция enumerate для нашего списка вернёт последовательность вида

[(0, '10'), (1, '11'), (2, '12')] 

Такой цикл избавляет нас от необходимости писать самостоятельно доступ по индексу массива. Важно понимать, что переменная elem и здесь не даёт нам доступа на запись в массив, она просто хранит указатель на объект, хранящийся по текущему индексу в списке.

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

Такие ситуации встречаются, например, когда мы пишем функцию, которая должна изменить значения в переданном списке вместо создания нового.

Если же нам не требуется изменять этот список, а достаточно создания нового, в котором будут храниться целочисленные представления соответствущих элементов, то можно воспользоваться встроенной функцией map , как предложил @ReinRaus:

array = list(map(int, array)) 

Только стоит помнить, что в Python 3 функция map возвращает генератор, поэтому стоит явно преобразовать результат в список.

Ещё один удобный способ получения такого же результата, это использование генератора списков:

array = [int(elem) for elem in array] 

Оба этих решения эквивалентны и являются аналогом следующего кода:

result_array = [] for elem in array: result_array.append(int(elem)) array = result_array 

Эти решения оставляют исходный список неизменным, создавая новый и только после присваивая его переменной array .

Продемострирую разницу этих способов на примере:

array = ['10', '11', '12'] link = array 

Важно понимать, что здесь обе переменные будут указывать на один и тот же список, а не являться двумя списками с одинаковыми значениями (здесь все ссылки явно отрисованы стрелками):

обе переменных указывают в одно и то же место

Выполним преобразование, изменяя элементы списка:

array = ['10', '11', '12'] link = array print(array, link) # ['10', '11', '12'] ['10', '11', '12'] for i, elem in enumerate(array): array[i] = int(elem) print(array, link) # [10, 11, 12] [10, 11, 12] 

Как мы видим, массив непосредственно изменился, а вместе с ним изменились данные, которые доступны по переменным, указывающим на этот список:

изменились значения элементов списка

Если же воспользоваться вторым способом

array = ['10', '11', '12'] link = array print(array, link) # ['10', '11', '12'] ['10', '11', '12'] array = list(map(int, array)) print(array, link) # [10, 11, 12] ['10', '11', '12'] 

то ещё по выводу программы можно заметить, что содержимое исходного списка не изменилось. Итоговая картина объектов будет выглядеть так:

введите сюда описание изображения

Мы видим, что был создан новый список, в котором были сохранены числовые представления значений исходного.

Для визуализации использовался сервис pythontutor.com.

ПРЕОБРАЗОВАНИЕ ТИПОВ ДАННЫХ В PYTHON

С помощью функции complex() удобно формировать комплексные числа, указывая через запятую два аргумента: действительную часть и мнимую часть.

a = complex(3.2, 1.5) print(a) 
(3.2+1.5j) 

Смешанная арифметика

Python поддерживает смешанную арифметику в выражениях, состоящих из чисел разных типов. При этом целочисленный тип (int) при необходимости расширяется до дробного (float), а дробный — до комплексного (complex). То же самое происходит при сравнении чисел разного типа.

Системы счисления

Для преобразования чисел в двоичную, восьмиричную и шестнадцатиричную систему служат функции bin(), oct() и hex(). Эти функции возвращают строковые представления чисел, что необходимо учитывать при работе с ними.

a = hex(38) print(a) 
0x26 

Преобразовать строковое представление недесятичного числа в десятичную систему можно с помощью функции int(), указав вторым аргументом основание системы счисления (от 2 до 36 включительно).

a = '0x26' b = int(a, base=16) print(b) 

Округление

Для округления чисел с плавающей точкой используется функция round(). Функция использует банковское округление (по Гауссу) до ближайшего чётного целого, чтобы избежать серийного накопления погрешности. Например, round(1.5) + round(2.5) будет равен 4. При обычном математическом округлении сумма округленных чисел будет равна 5.

С помощью второго аргумента функции round() можно округлить число до заданного количества знаков после запятой. Если воторой аргумент не задан, то число округляется до целого.

a = round(1.5) print(a) b = round(2.5) print(b) c = round(6.4567, 2) print(c) d = round(4.35, 1) print(d) e = round(4.45, 1) print(e) 
2 2 6.46 4.7 4.5 

Преобразование в строку

Для преобразования в строку используется функция str(). Аргументом функции str() может выступать число, строка, кортеж, список, множество, словарь, логическое значение, None.

Любой объект, преобразованный в строку, становится просто набором символов.

a = 5.3 x = str(a) print(x, type(a), type(x)) 

Преобразование в список

Для преобразования в список используется функция list(). Аргументом функции list() может выступать любой итерируемый тип данных (строка, кортеж, список, множество, словарь).

При преобразовании строки в список, мы получаем список, состоящий из символов строки.

Стоит обратить внимание на то, что при преобразовании словаря в список, в списке оказываются только ключи.

b = 'Python' x = list(b) print(x) c = (3, 4) x = list(c) print(x) d = [5, 6] x = list(d) print(x) e = x = list(e) print(x) f = x = list(f) print(x) 
['P', 'y', 't', 'h', 'o', 'n'] [3, 4] [5, 6] [8, 7] [1, 2] 

Преобразование в кортеж

Для преобразования в кортеж используется функция tuple(). Аргументом функции tuple() может выступать любой итерируемый тип данных (строка, кортеж, список, множество, словарь).

Преобразование в кортеж происходит по тому же принципу, по которому происходит преобразование в список.

Преобразование в множество

Для преобразования в множество используется функция set(). Аргументом функции set() может выступать любой итерируемый тип данных (строка, кортеж, список, множество, словарь).

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

a = [5, 6, 5, 6, 7] x = set(a) print(x) 

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

a = 227 x = set(str(a)) print(x) 

Преобразование в словарь

Для преобразования в словарь используется функция dict().

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

f = [[1, 'яблоко'], [2, 'тыква']] x = dict(f) print(x) 

Преобразование в логический тип

Для преобразования в логический тип используется функция bool().

Функция bool() вернет False, если в качестве аргумента выступает пустая строка, нулевое число, None, пустой список, пустой кортеж или пустое множество. Непустая строка, ненулевое число, даже если оно отрицательное, вернут True. Непустое множество, непустой список или непустой кортеж, даже если они содержат один пустой элемент, вернут True.

a = -7 x = bool(a) print(x) b = '' x = bool(b) print(x) c = x = bool(c) print(x) 
True False True 

Осваиваем Python: преобразование строки в число на конкретных примерах

Иногда требуется преобразовать строку в целое число или в число с плавающей точкой для осуществления определённых операций в Python.

Если вы попробуете выполнить то или иное действие со строкой в виде чисел, то получите ошибку.

Этот код приведёт к ошибке :

str_a = ’50’ b = 10 c = str_a + b print (c)

В Python можно использовать функции int и float для преобразования строки в целое число или число с плавающей точкой до осуществления каких-либо операций.

Обновлено: 2023-05-31 19:18:07 Сергей Бензенко автор материала

Использование функции int() для преобразования строки в целое число

Рассмотрим следующий код:

str_a = '50' b = 10 c = int(str_a) + b print ("The value of c header-42948-2">Преобразование десятичной строки в число с плавающей точкой

Можно использовать класс float для того чтобы осуществить преобразование строки в число с плавающей точкой.

Пример использования float для преобразования строки:

#Пример преобразования string во float str_a = '50.85' b = 10.33 c = float(str_a) + b print ("The value of c 1" data-ab-test="post_related" data-ab-key="yarpp">
Модуль re Python – осваиваем регулярные выражения Python

Замечание: если вы попытаетесь использовать здесь функцию int(), то получите ошибку.

Преобразование списка строковых чисел в список целых чисел

Если нужно преобразовать строки из чисел, содержащиеся в списке, тогда используйте генератора списков.

Будет создан новый список, в котором можно применить функцию int в каждой итерации.

Код:

#Пример преобразования string в int в списке str_lst = ['1', '2', '3'] int_lst = [int(x) for x in str_lst] print (int_lst)

Будет выведен новый список, состоящий из целых чисел, полученных из строк.

Преобразование списка строк в список чисел с плавающей точкой

Аналогичным образом можно использовать float вместо int для преобразования списка, содержащего строки из целых чисел. Рассмотрим пример:

Код для преобразования элементов списка в числа с плавающей точкой:

#Пример преобразования string во float в списке str_lst = ['10.505', '2.3', '3.99'] float_lst = [float(x) for x in str_lst] print (float_lst)

Пример преобразования строки с запятыми в число

Ну а как насчёт строки наподобие “5,000,000”? Если попытаетесь преобразовать ее, используя функции int() или float() , то получите ошибку.

Решением будет использование import locale . Например:

locale.setlocale(locale.LC_ALL, ‘en_US.UTF-8’ )

Но это может вызвать проблемы в остальных локалях. Другое решение заключается в том, чтобы заменить запятые пустыми строками, то есть“”, а затем использовать функцию int.

str_a = '5,123,000' int_b = int(str_a.replace(',','')) print ("The integer value",int_b)

В результате получаем целое значение. Это же решение можно применить для конвертации строки в число с плавающей точкой.

Преобразование строки в число для расчёта високосного года -пример

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

Для этого введённое значение сначала преобразуется в целое число, а затем используется формула расчёта високосного года.

#Пример расчёта високосного года try: Y = int(input("Enter a Year? ")) exceptValueError: print ("You may only enter digits in '2000' format!") else: leap_or_not = Y%4 == 0 ifleap_or_not: print ("Leap year") else: print ("Not a leap year")

Вводимая строка сразу преобразуется в целое число, а затем используется для расчёта.

Как преобразовать целое число в строку?

Для преобразования целых чисел в строки в Python можно использовать функцию str() . Функция str() принимает объект, который может быть типа int , float , double и т.п.

Рассмотрим пример преобразования переменной типа int в строку, которая затем используется как строка для конкатенации:

#Примерпреобразованияint в string a_string = "str function for int to string" a_num = 456 print (a_string + str(a_num))
str function for int to string456

Если бы целочисленная переменная была использована без функции str(), возникла бы ошибка TypeError.

Сергей Бензенко автор-переводчик статьи « 5 examples to Convert a Python string to int and float »

Как преобразовать список чисел с плавающей запятой в список целых чисел в Питоне

Самый питонический способ преобразовать список чисел с плавающей запятой fs в список целых чисел – использовать однострочный код fs = [int (x) for x in fs]. Он перебирает все элементы в списке fs, используя понимание списка, и преобразует каждый элемент списка x в целочисленное значение с помощью конструктора int (x).

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

Проблема: Дан список чисел с плавающей запятой [1.0, 2.0, 3.0] . Как его преобразовать в список целых чисел [1, 2, 3] ?

Способы неприменимы к спискам списков. При необходимости можно добавить циклы или определить пользовательские функции.

Метод 1: Список

Предположим у нас есть список:

a = [1.1, 1.2, 1.8, 0.5, 5.9, -2.3]

Проверим тип элементов списка:

print(type(a[0])) #

Применим встроенную функцию int, получим список состоящий из целых чисел:

print([int(a) for a in a]) # [1, 1, 1, 0, 5, -2]

Проверим тип элементов списка:

A = [int(a) for a in a] print(type(A[0])) #

Таким образом, используя встроенную функцию int, которая, преобразуя вещественное число, делает округление в сторону нуля, а вернее будет сказать – отбрасывает дробную часть, мы можем однострочным кодом получить новый список целых чисел.

Метод 2: Функция Map

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

Применим к тому же списку ‘a’ код ниже:

print(list(map(int, a))) # [1, 1, 1, 0, 5, -2]

Проверять тип элементов полученного списка мы не будем, так как при вызове функции ‘map’ передали в нее уже описанную в методе 1 функцию ‘int’ в качестве аргумента, а результат обернули в список применением функции ‘list’.

Метод 3: Функция Round в определении Списка

Он очень схож с первым, но в отличие от ‘int’, он не просто отбрасывает дробную часть, а округляет до ближайшего четного целого числа, если дробная часть равна 0,5. Также можно передать в качестве второго аргумента количество знаков после запятой, до которых необходимо округление, по умолчанию это 0, этим мы и воспользуемся:

print([round(a) for a in a])

Проверим тип чисел нового списка:

D = [round(a) for a in a] print(type(D[0])) #

Как видим из этого примера, есть разные встроенные функции для достижения нашей цели, отличие в способе и величине погрешности при округлении.

Метод 4: Модуль Math

В этом способе я предлагаю воспользоваться импортируемым модулем ‘math’, в котором будем использовать три функции ceil() , floor() , и trunc() . Рассмотрим подробнее каждый. Синтаксис у них одинаковый, различие в способе округления.

Применим к изначальному списку:

a = [1.1, 1.2, 1.8, 0.5, 5.9, -2.3] print([math.ceil(a) for a in a]) # [2, 2, 2, 1, 6, -2]

‘Ceil’ округляет к ближайшему большему целому числу с учетом знака(-2.3 < -2 вывод будет True)

Проверим тип чисел в полученном списке:

C = [math.ceil(a) for a in a] print(type(C[0])) #

Рассмотрим следующую функцию в модуле ‘math’ – ‘floor’, её действие противоположно ‘ceil’ – округляет в меньшую сторону к ближайшему целому числу:

print([math.floor(a) for a in a]) # [1, 1, 1, 0, 5, -3]

F = [math.floor(a) for a in a] print(type(F[0])) #

Следующая функция – ‘trunc’, является аналогом встроенной функции ‘int’ – просто отбрасывает дробную часть какая она бы не была:

print([math.trunc(a) for a in a]) # [1, 1, 1, 0, 5, -2]

И снова проверим тип чисел нового списка:

T = [math.trunc(a) for a in a] print(type(T[0])) #

Метод 5: NumPy

Здесь рассмотрим преобразование списка из ‘int’ в массив c помощью модуля NumPy. Отличие массива от списка – все элементы массива должны быть одного типа, как “float’ и ‘int’. Числовые операции с большим объемом данных можно проводить с массивами гораздо быстрее и эффективнее чем со списками.

Превратим наш первый список ‘a’ в массив:

import numpy as np N = np.array(a, int)

В функцию array мы передаем два аргумента, имя списка для конвертации в массив и тип для каждого элемента.

# [ 1 1 1 0 5 -2]

Проверим тип элементов:

print(type(N[0])) #

В отличие от типа чисел ‘int’ в Python в модуле NumPy они определены несколько иначе и разделены на несколько подгрупп. Например, ‘int32’ – это целые числа в диапазоне от -2147483648 до 2147483647(4-байтовые числа), ‘int64’ – числа от -9223372036854775808 до 9223372036854775807(8-байтовые числа), также есть различные типы ‘int’ для 32- и 64-битных операционных систем, это обязательно надо учитывать при вычислениях с массивами.

Categories Python

Be on the Right Side of Change ��

  • The world is changing exponentially. Disruptive technologies such as AI, crypto, and automation eliminate entire industries. ��
  • Do you feel uncertain and afraid of being replaced by machines, leaving you without money, purpose, or value? Fear not! There a way to not merely survive but thrive in this new world!
  • Finxter is here to help you stay ahead of the curve, so you can keep winning as paradigms shift.

Learning Resources ��‍��

⭐ Boost your skills. Join our free email academy with daily emails teaching exponential with 1000+ tutorials on AI, data science, Python, freelancing, and Blockchain development!

Check out our free WhatsApp channel to stay educated on LLM developments:

Join the Finxter Academy and unlock access to premium courses �� to certify your skills in exponential technologies and programming.

New Finxter Tutorials:

  • The Art of Clean Code – Complexity
  • The Art of Clean Code – Free Book Overview
  • (Fixed) Python Request Error 500
  • What is the Fastest Way to Get a Sorted Unique List in Python?
  • Top 10 Cutting-Edge AI Applications and 30 Startups Disrupting Education
  • Top 50 Cutting-Edge Artificial Intelligence (AI) Applications in Business
  • OpenAI GPT Store – Get Your GPTs Ready in 5 Simple Steps
  • Top 10 Cutting-Edge Artificial Intelligence (AI) Applications in Healthcare
  • Top 50 Cutting-Edge Artificial Intelligence (AI) Applications in Manufacturing
  • What’s Not Going to Change in 10 Years? (Jeff Bezos)

Finxter Categories:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *