Как изменить тип элементов списка python

a - список строк :['0', '0', '0', '0', '0', '0', '0', '0', '0', '0'] for el in a: el = int(el) пытался таким способом преобразовать в числа, но в преобразует в рамках данного цикла

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

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

    for i, elem in enumerate(array):
        array[i] = int(elem)
    
  2. Создавая новый массив вместо старого

    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, а не ссылку на строку "10"

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

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 есть два числовых типа данных: целые числа (integer) и числа с плавающей запятой (float). 

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

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

Метод Python float() преобразует целые числа в числа с плавающей запятой. Чтобы использовать эту функцию, добавьте в скобки целое число:

float(57)

В этом случае 57 будет преобразовано в 57.0.

Этот метод можно использовать и с переменной. Объявим f равным 57, а затем выведем новое значение с плавающей запятой:

f = 57
print(float(f))

Результат:

 57.0

Используя функцию float(), мы можем преобразовывать целые числа в числа с плавающей запятой.

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

Python также имеет встроенную функцию для преобразования чисел с плавающей запятой в целые числа: int().

Функция  int() работает аналогично функции float(). Чтобы преобразовать десятичную дробь в целое число, вы можете добавить его внутрь скобок:

int(390.8)

В этом случае 390.8 будет преобразовано в 390.

Эту функцию можно использовать и с переменными. Давайте объявим b равным 125.0, а c — равным 390.8, а затем применим к переменным функцию int():

b = 125.0
c = 390.8

print(int(b))
print(int(c))

Результат:

 125
 390

При преобразовании чисел с плавающей запятой в целые числа с помощью функции int() Python отсекает все, что идет после запятой. Мы можем ожидать, что 390,8 округлится до 391, но с применением только лишь функции int() этого не произойдет.

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

В Python 3 при делении одного целого числа на другое целое число результат преобразуется в число с плавающей запятой. То есть, если разделить 5 на 2, в Python 3 вы получите число с плавающей запятой:

a = 5 / 2
print(a)
 2.5

В Python 2, так как вы имели дело с двумя целыми числами, вы получите ответ в виде целого числа: 5 / 2 = 2. Прочтите «Python 2 vs Python 3: Практические соображения» для получения дополнительной информации о различиях между Python 2 и Python 3.

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

Тип данных string представляет собой последовательность из одного или нескольких символов (буквы, цифры, символы). Строки — это распространенная форма данных в компьютерных программах. Нам может потребоваться довольно часто преобразовывать строки в числа и наоборот, особенно когда мы получаем данные, созданные пользователем.

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

Числа в строки можно преобразовать с помощью метода str(). Мы передаем число или переменную в скобки метода, а на выходе получаем строковое значение.

Давайте сначала рассмотрим преобразование целых чисел. Чтобы преобразовать целое число 12 в строку, передадим его в метод str():

str(12)

При запуске str(12) в интерактивной оболочке Python (чтобы войти в оболочку, введите python в окне терминала) вы получите следующий вывод:

 '12'

Кавычки вокруг числа 12 означают, что оно теперь является строковым значением, а не целым числом.

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

user = "Sammy"
lines = 50

print("Congratulations, " + user + "! You just wrote " + lines + " lines of code.")

Когда мы запускаем этот код, мы получаем следующую ошибку:

 TypeError: Can't convert 'int' object to str implicitly

Мы не можем объединять строки и целые числа в Python, поэтому нам придется преобразовать переменную lines в строковое значение:

user = "Sammy"
lines = 50

print("Congratulations, " + user + "! You just wrote " + str(lines) + " lines of code.")

Теперь при запуске кода мы получим следующий вывод, поздравляющий нашего пользователя с прогрессом:

 Congratulations, Sammy! You just wrote 50 lines of code.

Если мы хотим преобразовать в строку не целое число, а число с плавающей запятой, порядок действий остается прежним. Мы передаем в метод str() число с плавающей запятой, а возвращено будет строковое значение. Передавать в метод можно как само число, так и переменную:

print(str(421.034))

f = 5524.53
print(str(f))
 '421.034'
 '5524.53'

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

f = 5524.53
print("Sammy has " + str(f) + " points.")
 Sammy has 5524.53 points.

Мы можем быть уверены, что наш float был правильно преобразован в строку, потому что конкатенация была выполнена без ошибок.

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

Строки могут быть преобразованы в числа при помощи методов int() и float().

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

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

lines_yesterday = "50"
lines_today = "108"

lines_more = lines_today - lines_yesterday

print(lines_more)
 TypeError: unsupported operand type(s) for -: 'str' and 'str'

Поскольку два числовых значения хранились в строках, мы получили ошибку. Операнд «-» для вычитания не является допустимым операндом для двух строковых значений.

Давайте изменим код, чтобы включить в него метод int(). Он преобразует строки в целые числа и позволит нам выполнять математические действия со значениями, которые изначально были строками.

lines_yesterday = "50"
lines_today = "108"

lines_more = int(lines_today) - int(lines_yesterday)

print(lines_more)
 58

Переменная lines_more автоматически является целым числом, и в этом примере она равна числовому значению 58.

В приведенном выше примере мы также можем преобразовать строчные значения в числа с плавающей запятой, используя метод float() вместо метода int(). В этом случае вместо 58 мы получим число с плавающей запятой —  58.0. Пользователь Сэмми зарабатывает очки в дробных числах:

total_points = "5524.53"
new_points = "45.30"

new_total_points = total_points + new_points

print(new_total_points)
 5524.5345.30

В этом случае использование операнда «+» с двумя строками является допустимой операцией. Но эта операция объединяет две строки, а не складывает два числовых значения вместе. В результате наш output выглядит необычно, поскольку это просто два значения рядом друг с другом.

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

total_points = "5524.53"
new_points = "45.30"

new_total_points = float(total_points) + float(new_points)

print(new_total_points)
 5569.83

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

Если мы попытаемся при помощи метода int() конвертировать строку, представляющую собой десятичную дробь, в целое число, мы получим ошибку:

f = "54.23"
print(int(f))
 ValueError: invalid literal for int() with base 10: '54.23'

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

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

Вы можете использовать методы list() и tuple() для преобразования переданных им значений в тип данных списка и кортежа соответственно. В Python:

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

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

Начнем с преобразования списка в кортеж. Поскольку кортеж — это неизменяемый тип данных, такое преобразование может способствовать существенной оптимизации наших программ. Метод tuple() возвращает «кортежную» версию переданного ему значения.

print(tuple(['pull request', 'open source', 'repository', 'branch']))
 ('pull request', 'open source', 'repository', 'branch')

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

Давайте используем tuple() с переменной, представляющей список:

sea_creatures = ['shark', 'cuttlefish', 'squid', 'mantis shrimp']
print(tuple(sea_creatures))
 ('shark', 'cuttlefish', 'squid', 'mantis shrimp')

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

Мы можем преобразовать в кортеж не только список, но и любой итерируемый тип, включая строки:

print(tuple('Sammy'))
 ('S', 'a', 'm', 'm', 'y')

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

print(tuple(5000))
 TypeError: 'int' object is not iterable

Можно преобразовать целое число в строку, а затем в кортеж:  tuple(str(5000)). Но лучше выбрать читаемый код, а не сложные преобразования.

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

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

Давайте преобразуем кортеж в список. Будьте внимательны со скобками: одна пара для кортежа, вторая — для метода  list(), а третья — для метода print():

print(list(('blue coral', 'staghorn coral', 'pillar coral')))
 ['blue coral', 'staghorn coral', 'pillar coral']

Квадратные скобки сигнализируют о том, что кортеж, переданный в метод  list(), преобразован в список.

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

coral = ('blue coral', 'staghorn coral', 'pillar coral')
list(coral)

Если мы выведем list(coral), мы получим тот же результат, что и выше.

В список можно преобразовать не только кортеж, но и строку:

print(list('shark'))
 ['s', 'h', 'a', 'r', 'k']

Заключение

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

I have a script which reads a text file, pulls decimal numbers out of it as strings and places them into a list.

So I have this list:

my_list = ['0.49', '0.54', '0.54', '0.55', '0.55', '0.54', '0.55', '0.55', '0.54']

How do I convert each of the values in the list from a string to a float?

I have tried:

for item in my_list:
    float(item)

But this doesn’t seem to work for me.

Wenuka's user avatar

Wenuka

8052 gold badges9 silver badges24 bronze badges

asked Oct 23, 2009 at 15:33

2

[float(i) for i in lst]

to be precise, it creates a new list with float values. Unlike the map approach it will work in py3k.

answered Oct 23, 2009 at 15:34

SilentGhost's user avatar

SilentGhostSilentGhost

300k65 gold badges304 silver badges291 bronze badges

4

map(float, mylist) should do it.

(In Python 3, map ceases to return a list object, so if you want a new list and not just something to iterate over, you either need list(map(float, mylist) — or use SilentGhost’s answer which arguably is more pythonic.)

answered Oct 23, 2009 at 15:34

Tim Pietzcker's user avatar

Tim PietzckerTim Pietzcker

323k58 gold badges498 silver badges555 bronze badges

1

This would be an other method (without using any loop!):

import numpy as np
list(np.float_(list_name))

answered May 26, 2018 at 12:35

Amin Kiany's user avatar

Amin KianyAmin Kiany

6536 silver badges16 bronze badges

1

float(item) do the right thing: it converts its argument to float and and return it, but it doesn’t change argument in-place. A simple fix for your code is:

new_list = []
for item in list:
    new_list.append(float(item))

The same code can written shorter using list comprehension: new_list = [float(i) for i in list]

To change list in-place:

for index, item in enumerate(list):
    list[index] = float(item)

BTW, avoid using list for your variables, since it masquerades built-in function with the same name.

answered Oct 23, 2009 at 15:44

Denis Otkidach's user avatar

Denis OtkidachDenis Otkidach

31.4k8 gold badges77 silver badges98 bronze badges

2

you can even do this by numpy

import numpy as np
np.array(your_list,dtype=float)

this return np array of your list as float

you also can set ‘dtype’ as int

answered Sep 16, 2018 at 12:37

Alireza's user avatar

AlirezaAlireza

7467 silver badges10 bronze badges

1

You can use the map() function to convert the list directly to floats:

float_list = map(float, list)

theProcrastinator's user avatar

answered May 23, 2021 at 4:44

mnaghd01's user avatar

mnaghd01mnaghd01

1152 silver badges6 bronze badges

You can use numpy to convert a list directly to a floating array or matrix.

    import numpy as np
    list_ex = [1, 0] # This a list
    list_int = np.array(list_ex) # This is a numpy integer array

If you want to convert the integer array to a floating array then add 0. to it

    list_float = np.array(list_ex) + 0. # This is a numpy floating array

answered Jan 7, 2016 at 15:13

bfree67's user avatar

bfree67bfree67

6097 silver badges5 bronze badges

This is how I would do it.

my_list = ['0.49', '0.54', '0.54', '0.54', '0.54', '0.54', '0.55', '0.54', 
    '0.54', '0.54', '0.55', '0.55', '0.55', '0.54', '0.55', '0.55', '0.54', 
    '0.55', '0.55', '0.54']
print type(my_list[0]) # prints <type 'str'>
my_list = [float(i) for i in my_list]
print type(my_list[0]) # prints <type 'float'>

Stephen Rauch's user avatar

Stephen Rauch

46.8k31 gold badges109 silver badges131 bronze badges

answered Jan 27, 2018 at 23:41

Samlex's user avatar

SamlexSamlex

1393 silver badges5 bronze badges

you can use numpy to avoid looping:

import numpy as np
list(np.array(my_list).astype(float)

answered Jul 9, 2020 at 0:48

vitorrr's user avatar

1

import numpy as np
my_list = ['0.49', '0.54', '0.54', '0.54', '0.54', '0.54', '0.55', '0.54', '0.54', '0.54', '0.55', '0.55', '0.55', '0.54', '0.55', '0.55', '0.54', 
'0.55', '0.55', '0.54']
print(type(my_list), type(my_list[0]))   
# <class 'list'> <class 'str'>

which displays the type as a list of strings. You can convert this list to an array of floats simultaneously using numpy:

    my_list = np.array(my_list).astype(np.float)

    print(type(my_list), type(my_list[0]))  
    # <class 'numpy.ndarray'> <class 'numpy.float64'>

answered May 16, 2018 at 12:33

Barry O'Sullivan's user avatar

I had to extract numbers first from a list of float strings:

   df4['sscore'] = df4['simscore'].str.findall('d+.d+')

then each convert to a float:

   ad=[]
   for z in range(len(df4)):
      ad.append([float(i) for i in df4['sscore'][z]])

in the end assign all floats to a dataframe as float64:

   df4['fscore'] = np.array(ad,dtype=float)

answered Mar 5, 2019 at 13:34

Max Kleiner's user avatar

Max KleinerMax Kleiner

1,22812 silver badges14 bronze badges

for i in range(len(list)): list[i]=float(list[i])

double-beep's user avatar

double-beep

4,85916 gold badges32 silver badges41 bronze badges

answered May 23, 2019 at 16:05

user11545988's user avatar

newlist = list(map(float, mylist))

answered Oct 18, 2022 at 18:57

Aruz's user avatar

AruzAruz

316 bronze badges

I have solve this problem in my program using:

number_input = float("{:.1f}".format(float(input())))
list.append(number_input)

sentence's user avatar

sentence

7,8454 gold badges31 silver badges37 bronze badges

answered Sep 4, 2018 at 13:53

Gui's user avatar

1

I have a script which reads a text file, pulls decimal numbers out of it as strings and places them into a list.

So I have this list:

my_list = ['0.49', '0.54', '0.54', '0.55', '0.55', '0.54', '0.55', '0.55', '0.54']

How do I convert each of the values in the list from a string to a float?

I have tried:

for item in my_list:
    float(item)

But this doesn’t seem to work for me.

Wenuka's user avatar

Wenuka

8052 gold badges9 silver badges24 bronze badges

asked Oct 23, 2009 at 15:33

2

[float(i) for i in lst]

to be precise, it creates a new list with float values. Unlike the map approach it will work in py3k.

answered Oct 23, 2009 at 15:34

SilentGhost's user avatar

SilentGhostSilentGhost

300k65 gold badges304 silver badges291 bronze badges

4

map(float, mylist) should do it.

(In Python 3, map ceases to return a list object, so if you want a new list and not just something to iterate over, you either need list(map(float, mylist) — or use SilentGhost’s answer which arguably is more pythonic.)

answered Oct 23, 2009 at 15:34

Tim Pietzcker's user avatar

Tim PietzckerTim Pietzcker

323k58 gold badges498 silver badges555 bronze badges

1

This would be an other method (without using any loop!):

import numpy as np
list(np.float_(list_name))

answered May 26, 2018 at 12:35

Amin Kiany's user avatar

Amin KianyAmin Kiany

6536 silver badges16 bronze badges

1

float(item) do the right thing: it converts its argument to float and and return it, but it doesn’t change argument in-place. A simple fix for your code is:

new_list = []
for item in list:
    new_list.append(float(item))

The same code can written shorter using list comprehension: new_list = [float(i) for i in list]

To change list in-place:

for index, item in enumerate(list):
    list[index] = float(item)

BTW, avoid using list for your variables, since it masquerades built-in function with the same name.

answered Oct 23, 2009 at 15:44

Denis Otkidach's user avatar

Denis OtkidachDenis Otkidach

31.4k8 gold badges77 silver badges98 bronze badges

2

you can even do this by numpy

import numpy as np
np.array(your_list,dtype=float)

this return np array of your list as float

you also can set ‘dtype’ as int

answered Sep 16, 2018 at 12:37

Alireza's user avatar

AlirezaAlireza

7467 silver badges10 bronze badges

1

You can use the map() function to convert the list directly to floats:

float_list = map(float, list)

theProcrastinator's user avatar

answered May 23, 2021 at 4:44

mnaghd01's user avatar

mnaghd01mnaghd01

1152 silver badges6 bronze badges

You can use numpy to convert a list directly to a floating array or matrix.

    import numpy as np
    list_ex = [1, 0] # This a list
    list_int = np.array(list_ex) # This is a numpy integer array

If you want to convert the integer array to a floating array then add 0. to it

    list_float = np.array(list_ex) + 0. # This is a numpy floating array

answered Jan 7, 2016 at 15:13

bfree67's user avatar

bfree67bfree67

6097 silver badges5 bronze badges

This is how I would do it.

my_list = ['0.49', '0.54', '0.54', '0.54', '0.54', '0.54', '0.55', '0.54', 
    '0.54', '0.54', '0.55', '0.55', '0.55', '0.54', '0.55', '0.55', '0.54', 
    '0.55', '0.55', '0.54']
print type(my_list[0]) # prints <type 'str'>
my_list = [float(i) for i in my_list]
print type(my_list[0]) # prints <type 'float'>

Stephen Rauch's user avatar

Stephen Rauch

46.8k31 gold badges109 silver badges131 bronze badges

answered Jan 27, 2018 at 23:41

Samlex's user avatar

SamlexSamlex

1393 silver badges5 bronze badges

you can use numpy to avoid looping:

import numpy as np
list(np.array(my_list).astype(float)

answered Jul 9, 2020 at 0:48

vitorrr's user avatar

1

import numpy as np
my_list = ['0.49', '0.54', '0.54', '0.54', '0.54', '0.54', '0.55', '0.54', '0.54', '0.54', '0.55', '0.55', '0.55', '0.54', '0.55', '0.55', '0.54', 
'0.55', '0.55', '0.54']
print(type(my_list), type(my_list[0]))   
# <class 'list'> <class 'str'>

which displays the type as a list of strings. You can convert this list to an array of floats simultaneously using numpy:

    my_list = np.array(my_list).astype(np.float)

    print(type(my_list), type(my_list[0]))  
    # <class 'numpy.ndarray'> <class 'numpy.float64'>

answered May 16, 2018 at 12:33

Barry O'Sullivan's user avatar

I had to extract numbers first from a list of float strings:

   df4['sscore'] = df4['simscore'].str.findall('d+.d+')

then each convert to a float:

   ad=[]
   for z in range(len(df4)):
      ad.append([float(i) for i in df4['sscore'][z]])

in the end assign all floats to a dataframe as float64:

   df4['fscore'] = np.array(ad,dtype=float)

answered Mar 5, 2019 at 13:34

Max Kleiner's user avatar

Max KleinerMax Kleiner

1,22812 silver badges14 bronze badges

for i in range(len(list)): list[i]=float(list[i])

double-beep's user avatar

double-beep

4,85916 gold badges32 silver badges41 bronze badges

answered May 23, 2019 at 16:05

user11545988's user avatar

newlist = list(map(float, mylist))

answered Oct 18, 2022 at 18:57

Aruz's user avatar

AruzAruz

316 bronze badges

I have solve this problem in my program using:

number_input = float("{:.1f}".format(float(input())))
list.append(number_input)

sentence's user avatar

sentence

7,8454 gold badges31 silver badges37 bronze badges

answered Sep 4, 2018 at 13:53

Gui's user avatar

1

Понятие приведения типов в Python

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

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

Приведением типа называется процесс преобразования значения одного типа данных в значение другого типа.

Как уже упоминалось ранее, для преобразования различных типов данных между собой в Python доступен целый ряд встроенных функций (конструкторов типов):

  • bool() – приведение к логическому типу,
  • int() – приведение к целочисленному типу,
  • float() – приведение к вещественному типу,
  • complex() – приведение к комплексному числу,
  • str() – приведение к строковому типу,
  • tuple() – приведение к кортежу,
  • list() – приведение к списку,
  • dict() – приведение к словарю,
  • set() – приведение к множеству.

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

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

Приведение к типу bool

Во время преобразования к типу bool (логический тип данных) следующие значения рассматриваются как
False:

  • само значение False,
  • значение None,
  • нулевые числовые значения 0, 0.0 и 0+0j,
  • пустая строка «»,
  • пустые объекты: [], tuple(), {}, dict().

Все остальные значения преобразуются в значение True, включая число -1, поскольку оно представляет собой обычное
отрицательное число, отличное от нуля (см. пример №1). Тоже самое касается коллекций с одним нулевым значением, например,
[0], {0.0}, (0,), а также непустых строк, например,
‘0’ или ‘0.0’.

# False.        
print('bool(None):', bool(None))       
# False.        
print('bool(0):', bool(0))         
# False.        
print('bool(0.0):', bool(0.0))        
# False.        
print('bool(0+0j):', bool(0+0j))        
# False.        
print('bool(""):', bool(''))        
# False.        
print('bool([]):', bool([]))        
# False.        
print('bool({}):', bool({}))        
# False.        
print('bool(tuple()):', bool(tuple()))        
# False.        
print('bool(dict()):', bool(dict()))        

print()

# True.        
print('bool("0"):', bool('0'))        
# True.        
print('bool(-1):', bool(-1)) 
# True.        
print('bool([False]):', bool([False])) 
# True.        
print('bool({0,}):', bool({0,}))        
# True.        
print('bool((0,)):', bool((0,)))
bool(None): False
bool(0): False
bool(0.0): False
bool(0+0j): False
bool(""): False
bool([]): False
bool({}): False
bool(tuple()): False
bool(dict()): False

bool("0"): True
bool(-1): True
bool([False]): True
bool({0,}): True
bool((0,)): True














		
			

Пример №1. Приведение к типу bool.

Приведение к типу int

В случае приведения к типу int (целые числа):

  • Логическое значение True преобразуется в 1,
    False – в 0.
  • Вещественные числа просто усекаются до целой части. Например, в случае приведения вещественного числа -37.9
    к целочисленному типу оно будет преобразовано в число -37.
  • Если строка содержит верную запись целого числа в десятичной системе счисления, то интерпретатор в процессе приведения строки к целочисленному типу вернет это число.
  • Если строка num_str содержит верное представлением целого числа в системе счисления с указанным основанием base,
    то преобразовать ее можно в целое число при помощи конструктора типа с двумя аргументами int(num_str, base=10)
    (подробнее здесь).

Для других типов данных приведение к целочисленному типу не определено, поэтому попытка такого преобразования приведет к ошибке (см. пример №2).

# 1.        
print('int(True): ', int(True))          
# 0.        
print('int(False): ', int(False))       
# 53.        
print('int("+53"): ', int('+53'))            
# -7.        
print('int(-7.33): ', int(-7.33))        
# 0.        
print('int(.33): ', int(.33))        

# int() argument must be a ...        
# print('int(5.2+1.3j): ', int(5.2+1.3j))        
        
# int() argument must be a ...        
# print('int(None): ', int(None))         
        
# invalid literal for ...        
# print('int(""): ', int(''))        

# invalid literal for ...        
# print('int("3.7"): ', int('3.7'))         

# int() argument must be a ...        
# print('int([5]): ', int([5]))
int(True): 1
int(False): 0
int("-53"): -53
int(-7.33): -7
int(.33): 0


















		
			

Пример №2. Приведение к типу int.

Приведение к типу float

В случае приведения к типу float (вещественные числа):

  • Логическое значение True преобразуется в 1.0,
    False – в 0.0.
  • Целые числа преобразуются в вещественные простым добавлением нулевой дробной части. Например, целое отрицательное число -37
    будет преобразовано в число -37.0.
  • Если строка содержит верное представление целого числа в десятичной системе счисления, то интерпретатор в процессе приведения строки к вещественному типу вернет это число, добавив к нему
    нулевую дробную часть. При этом допускаются начальные и конечные пробельные символы, а также знаки плюса и минуса. Например, строка, содержащая запись целого отрицательного числа
    с пробелами ‘ -105 ‘ будет преобразовано в число -105.0.
  • Если строка содержит верное представление вещественного числа в десятичной системе счисления, то интерпретатор в процессе приведения строки к вещественному типу вернет это число.
    При этом допускаются начальные и конечные пробельные символы, а также знаки плюса и минуса. Например, строка, содержащая запись вещественного отрицательного числа с пробелами
    ‘ -1.5 ‘ будет преобразовано в число -1.5.
  • Также строка может представлять значения ‘NaN’, ‘Infinity’ или ‘-Infinity’.

Для других типов данных приведение к вещественному типу не определено, поэтому попытка такого преобразования приведет к ошибке (см. пример №3).

# 1.0.        
print('float(True): ', float(True))          
# 0.0.        
print('float(False): ', float(False))       
# 53.0.        
print('float(" +53"): ', float(' +53'))            
# -7.33.        
print('float("-7.33"): ', float('-7.33'))        
# 0.013.        
print('float("1.3e-2 "): ', float('1.3e-2 '))        
# nan.        
print('float("NaN"): ', float('NaN'))        
# -inf.        
print('float(" -Infinity "): ', float(' -Infinity '))        

# float() argument must be a string...        
# print('float(5.2+1.3j): ', float(5.2+1.3j))        
        
# float() argument must be a string...        
# print('float(None): ', float(None))         
        
# could not convert string to float...        
# print('float(""): ', float(''))        

# float() argument must be a string...        
# print('float([5]): ', float([5]))
float(True): 1.0
float(False): 0.0
float(" +53"): 53.0
float("-7.33"): -7.33
float("1.3e-2 "): 0.013
float("NaN"): nan
float(" -Infinity "): -inf

















		
			

Пример №3. Приведение к типу float.

Приведение к типу complex

В случае приведения к типу complex (комплексные числа):

  • Логическое значение True преобразуется в (1+0j),
    False – в 0j.
  • Целые и вещественные числа преобразуются в комплексные простым добавлением нулевой мнимой части +0j. Например, отрицательное вещественное число
    -3.7 будет преобразовано в комплексное число (-3.7+0j).
  • Если строка содержит верное представление комплексного числа, то интерпретатор в процессе приведения строки к комплексному типу вернет это число. При этом допускаются начальные и
    конечные пробельные символы, а также знаки плюса и минуса как перед действительной, так и мнимой частью. Однако пробелов между действительной и мнимой частями быть не должно! Например,
    строка, содержащая запись комплексного числа с пробелами ‘ -5.5+0.2j ‘ будет преобразовано в число (-5.5+0.2j).

Для других типов данных приведение к комплексному типу не определено, поэтому попытка такого преобразования приведет к ошибке (см. пример №4).

# (1+0j).        
print('complex(True):', complex(True))          
# 0j.        
print('complex(False):', complex(False))       
# (5.9-3.2j).        
print('complex(" +5.9-3.2j"):', complex(' +5.9-3.2j'))        
# (53+0j).        
print('complex(" 53"):', complex(' 53'))            
# (-7.33+0j).        
print('complex(" -7.33 "):', complex(' -7.33 '))        
# (0.013+0j).        
print('complex("1.3e-2 "):', complex('1.3e-2 '))        
# (nan+0j).        
print('complex("NaN"):', complex('NaN'))        
# (-inf+0j).        
print('complex(" -Infinity "):', complex(' -Infinity '))        
        
# complex() arg is a malformed string.       
# print('complex("5.2 + 1.3j"):', complex('5.2 + 1.3j'))        
        
# complex() first argument must be...        
# print('complex(None):', complex(None))         
        
# complex() arg is a malformed string.        
# print('complex(""):', complex(''))        

# complex() first argument must be...        
# print('complex([5]):', complex([5]))
complex(True): (1+0j)
complex(False): 0j
complex(" +5.9-3.2j"): (5.9-3.2j)
complex(" 53"): (53+0j)
complex(" -7.33 "): (-7.33+0j)
complex("1.3e-2 "): (0.013+0j)
complex("NaN"): (nan+0j)
complex(" -Infinity "): (-inf+0j)


















		
			

Пример №4. Приведение к типу complex.

Приведение к типу str

В случае приведения к типу str (строки) интерпретатор просто вернет строковое представление объекта, которое представлено методом приводимого объекта
object.__str__() (см. пример №5).

# True.        
print('str(True):', str(True))          
# False.        
print('str(False):', str(False))       
# (5.9-3.2j).        
print('str+5.9-3.2j:', str(+5.9-3.2j))        
# 53.        
print('str(53):', str(+53))            
# -7.33.        
print('str(-7.33):', str(-7.33))        
# 0.013.        
print('str(1.3e-2):', str(1.3e-2))        
# None.        
print('str(None):', str(None))        
# [0.5, 1,5].        
print('str([0.5, 1,5]):', str([0.5, 1,5]))                
# {'one', 'two'}.        
print("str({'one', 'two'}):", str({'one', 'two'}))                 
# (2, '3').        
print("str((2, '3')):", str((2, '3')))        
# {1: [2, True]}.        
print('str({1: [2, True]}):', str({1: [2, True]}))
str(True): True
str(False): False
str+5.9-3.2j: (5.9-3.2j)
str(53): 53
str(-7.33): -7.33
str(1.3e-2): 0.013
str(None): None
str([0.5, 1,5]): [0.5, 1, 5]
str({'one', 'two'}): {'one', 'two'}
str((2, '3')): (2, '3')
str({1: [2, True]}): {1: [2, True]}









		
			

Пример №5. Приведение к типу str.

Приведение к типу tuple

К типу tuple (кортежи) могут быть преобразованы только итерируемые объекты. При этом словари преобразуются в кортежи с ключами, теряя свои значения
(см. пример №6).

# ('a', 'b', 'c').        
print("tuple('abc'):", tuple('abc'))         
# (1, 2, 3).        
print('tuple([1, 2, 3]):', tuple([1, 2, 3]))                
# ('one', 'two').        
print("tuple({'one', 'two'}):", tuple({'one', 'two'}))                 
# (1, 2).        
print("tuple({1: 'one', 2: 'two'}):", tuple({1: 'one', 2: 'two'}))                
# ('one', 'two').        
print("tuple({'one': 1, 'two': 2}):", tuple({'one': 1, 'two': 2}))         
# (1, 2, 3).        
print("tuple(range(1, 4)):", tuple(range(1, 4)))        

# bool object is not iterable.        
# print('tuple(True): ', tuple(True))
          
# int object is not iterable.        
# print('tuple(53): ', tuple(53))
            
# NoneType object is not iterable.        
# print('tuple(None): ', tuple(None))
tuple('abc'): ('a', 'b', 'c')
tuple([1, 2, 3]): (1, 2, 3)
tuple({'one', 'two'}): ('one', 'two')
tuple({1: 'one', 2: 'two'}): (1, 2)
tuple({'one': 1, 'two': 2}): ('one', 'two')
tuple(range(1, 4)): (1, 2, 3)













		
			

Пример №6. Приведение к типу tuple.

Приведение к типу list

К типу list (списки) могут быть преобразованы только итерируемые объекты. При этом словари преобразуются в списки с ключами, теряя свои значения
(см. пример №7).

# ['a', 'b', 'c'].        
print("list('abc'):", list('abc'))         
# [1, 2, 3].        
print('list((1, 2, 3)):', list((1, 2, 3)))                
# ['one', 'two'].        
print("list({'one', 'two'}):", list({'one', 'two'}))                 
# [1, 2].        
print("list({1: 'one', 2: 'two'}):", list({1: 'one', 2: 'two'}))                
# ['one', 'two'].        
print("list({'one': 1, 'two': 2}):", list({'one': 1, 'two': 2}))         
# [1, 2, 3].        
print("list(range(1, 4)):", list(range(1, 4)))        

# bool object is not iterable.        
# print('list(True): ', list(True))          

# int object is not iterable.        
# print('list(53): ', list(53))            

# NoneType object is not iterable.        
# print('list(None): ', list(None))
list('abc'): ['a', 'b', 'c']
list((1, 2, 3)): [1, 2, 3]
list({'one', 'two'}): ['one', 'two']
list({1: 'one', 2: 'two'}): [1, 2]
list({'one': 1, 'two': 2}): ['one', 'two']
list(range(1, 4)): [1, 2, 3]













		
			

Пример №7. Приведение к типу list.

Приведение к типу set

К типу set (множества) могут быть преобразованы только итерируемые объекты. При этом словари преобразуются в множества с ключами, теряя свои значения
(см. пример №8).

# {'a', 'b', 'c'}.        
print("set('abc'):", set('abc'))         
# {1, 2, 3}.        
print('set((1, 2, 3)):', set((1, 2, 3)))                
# {1, 2}.        
print("set({1: 'one', 2: 'two'}):", set({1: 'one', 2: 'two'}))                
# {'one', 'two'}.        
print("set({'one': 1, 'two': 2}):", set({'one': 1, 'two': 2}))         
# {1, 2, 3}.        
print("set(range(1, 4)):", set(range(1, 4)))        

# bool object is not iterable.        
# print('set(True): ', set(True))          

# int object is not iterable.        
# print('set(53): ', set(53))            

# NoneType object is not iterable.        
# print('set(None): ', set(None))
set('abc'): {'b', 'a', 'c'}
set((1, 2, 3)): {1, 2, 3}
set({1: 'one', 2: 'two'}): {1, 2}
set({'one': 1, 'two': 2}): {'one', 'two'}
set(range(1, 4)): {1, 2, 3}












		
			

Пример №8. Приведение к типу set.

Приведение к типу dict

К типу dict (словари) напрямую могут быть преобразованы только итерируемые объекты, содержащие пары значений, в которых первые элементы становятся ключами
словаря, а вторые – его значениями. Например, это могут быть списки, кортежи или множества, содержащие в качестве своих элементов другие списки, кортежи или множества из двух элементов
(см. пример №9). При этом следует помнить, что только хешируемые (неизменяемые) объекты могут быть ключами словаря или элементами множества.

# {1: 'a', 2: 'b'}.        
print("dict([[1, 'a'], (2, 'b')]):", dict([[1, 'a'], (2, 'b')]))         
# {1: 'a', 2: 'b'}.        
print("dict([(1, 'a'), {2, 'b'}]):", dict([(1, 'a'), {2, 'b'}]))         

# {1: 'a', 2: 'b'}.        
print("dict(((1, 'a'), {2, 'b'})):", dict(((1, 'a'), {2, 'b'})))              
# {1: 'a', 2: 'b'}.        
print("dict(({1, 'a'}, [2, 'b'])):", dict(({1, 'a'}, [2, 'b'])))              

# {1: 'a', 2: 'b'}.        
print("dict({(1, 'a'), (2, 'b')}):", dict({(1, 'a'), (2, 'b')}))        


# unhashable type: list (списки не могут быть ключами).        
# print("dict([[[1], 'a'], (2, 'b')]):", dict([[[1], 'a'], (2, 'b')]))        

# unhashable type: list (список - недопустимый эл-т мн-ва).        
# print("dict({[1, 'a'], (2, 'b')}):", dict({[1, 'a'], (2, 'b')}))                

# dictionary update sequence element #0 has length 3; 2 is required.        
# print("dict([(1, 'a'), {2, 'b'}]):", dict([(1, 'a', 3), {2, 'b'}]))        

# bool object is not iterable.        
# print('dict(True): ', dict(True))
dict([[1, 'a'], (2, 'b')]): {1: 'a', 2: 'b'}
dict([(1, 'a'), {2, 'b'}]): {1: 'a', 2: 'b'}
dict(((1, 'a'), {2, 'b'})): {1: 'a', 2: 'b'}
dict(({1, 'a'}, [2, 'b'])): {1: 'a', 2: 'b'}
dict({(1, 'a'), (2, 'b')}): {2: 'b', 1: 'a'}


















		
			

Пример №9. Приведение к типу dict.

Краткие итоги параграфа

  • Для преобразования различных типов данных между собой в Python доступен целый ряд встроенных функций (конструкторов типов):
    bool() – приведение к логическому типу, int() – приведение к целочисленному типу,
    float() – приведение к вещественному типу, complex() – приведение к комплексному числу,
    str() – приведение к строковому типу, tuple() – приведение к кортежу,
    list() – приведение к списку, dict() – приведение к словарю,
    set() – приведение к множеству.
  • В операциях, например, с различными типами чисел или же в условных инструкциях и выражениях интерпретатор неявно (автоматически) преобразует объекты к общему типу. Однако в большинстве
    случаев это не так, поэтому следует внимательно следить за текущим типом переменной и при необходимости самостоятельно осуществлять явное приведение к нужному типу.

Помогите проекту, подпишитесь!

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

  • Доступ ко всем ответам на вопросы и решениям задач.
  • Возможность загрузки учебных кодов и программ на свой компьютер.
  • Доступ ко всем тренажерам и видеоурокам (когда появятся).
  • Возможность внести свой скромный вклад в развитие проекта и мира во всем мире,
    а также выразить свою благодарить автору за его труд. Нам очень нужна ваша поддержка!

Python для начинающих
На страницу подписки

Вопросы и задания для самоконтроля

1. Каким будет результат сложения двух переменных a = 5 и b = ‘7’? А если их
перемножить?

Показать решение.

Ответ. В первом случае мы получим ошибку, т.к. оператор сложения подразумевает наличие операндов одного типа, но интерпретатор в общем случае
не занимается автоматическим приведением типов, оставляя эту обязанность программистам. А вот умножение строки на число предусмотрено заранее, поэтому на выходе мы получим строку
‘77777’.

2. Приведите пример ситуации, в которой интерпретатор осуществляет неявное приведение к нужному типу.

Показать решение.

Ответ. Примерами могут служить: преобразование к вещественному типу при сложении целого и вещественного числа
(5 + 0.3) или же преобразование объектов к логическому типу в условных инструкциях и выражениях (1 if ‘ok’ else 0).

3. Какой важной особенностью должны обладать объекты, которые явно преобразуются в кортежи, списки или множества?

Показать решение.

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

4. В каких случаях интерпретатор возбудит ошибки?

Показать решение.

print(bool([False]))     

print(int('7.5'))         

print(float(None))          
                       
print(float('0.55'))          
        
print(str(None))          
        
print(list(range(1, 5)))            
        
print(dict([[[5], 'пять']]))             
        
print(dict([[5, 'пять']]))

# True.        
print('bool([False]):', bool([False]))     

# invalid literal for ...        
# print('int("7.5"): ', int('7.5'))         

# float() argument must be a string...        
# print('float(None): ', float(None))          
                       
# 0.55.        
print('float("0.55"): ', float('0.55'))          
        
# None.        
print('str(None):', str(None))          
        
# [1, 2, 3, 4].        
print("list(range(1, 5)):", list(range(1, 5)))            
        
# unhashable type: list (списки не могут быть ключами).        
# print("dict([[[5], 'пять']]):", dict([[[5], 'пять']]))             
        
# {5: 'пять'}.        
print("dict([[5, 'пять']]):", dict([[5, 'пять']]))
bool([False]): True
float("0.55"):  0.55
str(None): None
list(range(1, 5)): [1, 2, 3, 4]
dict([[5, 'пять']]): {5: 'пять'}

















			

Быстрый переход к другим страницам

В Python любые данные являются объектами с определенным классом. Следовательно типы данных являются классами, а переменные — это экземпляры или объекты этих классов.

С помощью функции type() можно определить к какому классу относится переменная:

my_str = 'строка'
my_list = ['один', 'два', 'три']
my_tuple = (1, 2, 3)
my_set = {1, 2, 3}
my_dict = {'Sasha': 35, 'Maxim': 30, 'Ivan': 20}
print(type(my_str))
print(type(my_list))
print(type(my_tuple))
print(type(my_set))
print(type(my_dict))
#<class 'str'>
#<class 'list'>
#<class 'tuple'>
#<class 'set'>
#<class 'dict'>

Так как Python является динамически типизированным языком, то здесь не нужно указывать, к какому типу данных будет относиться переменная.

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

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

a = 100
print(type(a))
a = 'Текст'
print(type(a))
a = [1, 2, 3]
print(type(a))
#<class 'int'>
#<class 'str'>
#<class 'list'>

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

Атомарные и структурные типы данных

В Python типы данных делятся на 2 вида: атомарные и ссылочные.

Атомарные типы данных:

  • числа;
  • строки;
  • булевы;
  • None.

Ссылочные типы данных:

  • списки;
  • множества;
  • кортежи;
  • словари;
  • функции;
  • классы;

Отличия между ними в том, что атомарные типы данных при присваивании переменной, передаются по значению, а ссылочные типы данных при присваивании переменной передаются по ссылке.

Пример:

a = 1
b = a
a = 2
print(a)
print(b)
#2
#1

Здесь наглядно видно, что переменной b было присвоено именно значение переменной a, а не ссылка на область памяти.

Теперь возьмем ссылочный тип данных — список:

my_list = [1, 2, 3]
my_list_2 = my_list
my_list[0] = 0
print(my_list)
print(my_list_2)
#[0, 2, 3]
#[0, 2, 3]

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

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

my_list = [1, 2, 3]
my_list_2 = my_list.copy()
my_list[0] = 0
print(my_list)
print(my_list_2)
#[0, 2, 3]
#[1, 2, 3]

Основные типы данных Python

К стандартным типам данных в Python относятся:

  • Числа.
  • Строки.
  • Списки.
  • Кортежи.
  • Словари.
  • Множества.

Разберем подробнее каждый тип данных.

Числа

Числовой тип данных представляет из себя:

  • Целые числа
  • Вещественные числа
  • Комплексные числа

Целые числа

Это числа без дробной части, могу быть, как положительными, так и отрицательными.

Целые числа имею тип данных int:

a = 200
b = -34
c = 0
print(type(a))
print(type(b))
print(type(c))
#<class 'int'>
#<class 'int'>
#<class 'int'>

Вещественные числа

Это числа с плавающей точкой, т.е. числа с дробной частью.

Вещественные числа имеют тип данных float:

a = 200.1543
b = -34.0
c = 0.9
print(type(a))
print(type(b))
print(type(c))
#<class 'float'>
#<class 'float'>
#<class 'float'>

Комплексные числа

Эти числа записываются в формате x+yj, где x — действительная часть, а y — мнимая часть числа.

Комплексные числа имеют тип данных complex:

a = 1+2j
print(type(a))
#<class 'complex'>

Этот тип чисел применим в основном в сложных математических вычислениях и редко используется в обычных задачах.

Логический тип данных bool

Этот тип данных имеет только 2 значения: False и True (истина и ложь).

Также стоит заметить, что True и False обязательно пишутся с большой буквы, иначе вы получите ошибку NameError: name ‘true’ is not defined.

print(type(True))
print(type(False))
#<class 'bool'>
#<class 'bool'>

Строки

Строка — неизменяемая упорядоченная последовательность символов.

Строки имеют тип данных str:

my_str = 'текст'
print(type(my_str))
#<class 'str'>

Списки

Список — изменяемая и индексируемая последовательность любых элементов (даже смешанного типа).

Списки имеют тип данных list:

my_list = ['текст', 1, 100, -5.43]
print(type(my_list))
#<class 'list'>

Кортежи

Кортежи — неизменяемая и индексируемая последовательность элементов. В целом кортежи похожи на строки, только здесь нельзя изменять элементы последовательности.

Кортежи имеют тип данных tuple:

my_tuple = ('текст', 1, 100, -5.43)
print(type(my_tuple))
#<class 'tuple'>

Словари

Словари — неупорядоченный набор пар ключ:значение.

Словари имеют тип данных dict:

my_dict = {'ключ1':'значение1', 'ключ2':'значение2', 'ключ3':'значение3'}
print(type(my_dict))
#<class 'dict'>

Множества

Множества — неупорядоченный набор уникальных и неизменяемых элементов.

Множества имеют тип данных dict:

my_set = {1, 2, 3, 4}
print(type(my_set))
#<class 'set'>

Преобразование типов данных

Преобразование типов данных — это конвертация объекта из одного типа данных в другой.

В Python имеется 2 способа преобразования:

  1. Неявное преобразование типов.
  2. Явное приведение типов.

При неявном преобразовании Python самостоятельно конвертирует тип данных.

Пример:

a = 1
b = 2.2
a = a + b
print(a)
print(type(a))
print(type(b))
#3.2
#<class 'float'>
#<class 'float'>

У нас есть переменная a, которая имеет тип int, т.к. ей присвоено целое число. И есть переменная b с типом данных float.
После того, как мы сложили эти две переменные и эту сумму присвоили переменной a — у нее изменился тип на float.

Python всегда конвертирует меньший по диапазону тип данных в больший, чтобы избежать потери данных.

При явном приведении типов, программист сам меняет тип данных с помощью функций int(), float(), str() и т.д.

Следует помнить, что при преобразовании типа данных функции для приведения типа не изменяет переданное значение, а возвращает новое значение другого типа.

Преобразовать х в целое число: int(х)

Поменяем тип float на int:

a = 10.8
b = int(a)
print(b)
print(type(a))
print(type(b))
#10
#<class 'float'>
#<class 'int'>

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

Преобразовать х в вещественное число: float(x)

Поменяем тип int на float:

a = 15
b = float(a)
print(b)
print(type(a))
print(type(b))
#15.0
#<class 'int'>
#<class 'float'>

Преобразовывать х в строку: str(x)

Поменяем тип int на str:

a = 15
b = str(a)
print(b)
print(type(a))
print(type(b))
#15
#<class 'int'>
#<class 'str'>

Преобразовать s в кортеж: tuple(s)

Поменяем тип str на tuple:

a = 'текст'
b = tuple(a)
print(b)
print(type(a))
print(type(b))
#('т', 'е', 'к', 'с', 'т')
#<class 'str'>
#<class 'tuple'>

Преобразовать s в список: list(s)

Поменяем тип str на list:

a = 'текст'
b = list(a)
print(b)
print(type(a))
print(type(b))
#['т', 'е', 'к', 'с', 'т']
#<class 'str'>
#<class 'list'>

Преобразовать s в словарь: dict(s)

Преобразуем список кортежей list в словарь dict:

a = [(1, 2), (3, 4)]
b = dict(a)
print(b)
print(type(a))
print(type(b))
#{1: 2, 3: 4}
#<class 'list'>
#<class 'dict'>

Вступление

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

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

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

В Python есть дваnumber data types:integers иfloating-point numbers или числа с плавающей запятой. Иногда вы работаете над чужим кодом и вам нужно будет преобразовать целое число в число с плавающей точкой или наоборот, или вы можете обнаружить, что вы использовали целое число, когда то, что вам действительно нужно, это число с плавающей точкой. Python имеет встроенные методы, позволяющие вам легко преобразовывать целые числа в числа с плавающей точкой и числа с плавающей точкой в ​​целые числа.

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

Метод Pythonfloat() преобразует целые числа в числа с плавающей запятой. Чтобы использовать эту функцию, добавьте целое число внутри скобок:

В этом случае57 будет преобразовано в57.0.

Вы также можете использовать это с переменной. Давайте объявимf равным57, а затем распечатаем новое значение с плавающей запятой:

Используя функциюfloat(), мы можем преобразовывать целые числа в числа с плавающей запятой.

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

Python также имеет встроенную функцию для преобразования чисел с плавающей запятой в целые числа:int().

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

В этом случае390.8 будет преобразовано в390.

Вы также можете использовать это с переменными. Давайте объявимb равным125.0, аc равным390.8, а затем распечатаем новые числа с плавающей запятой:

b = 125.0
c = 390.8

print(int(b))
print(int(c))

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

Числа, преобразованные через деление

В Python 3 соответствующие частные преобразуются из целых чисел в числа с плавающей запятой при выполненииdivision, хотя они не находятся вPython 2. То есть, когда вы разделите 5 на 2, в Python 3 вы получите плавающий ответ (2.5):

В Python 2, поскольку вы имели дело с двумя целыми числами, вместо этого вы получили бы целое число в качестве ответа:5 / 2 = 2. Прочтите «https://www.digitalocean.com/community/tutorials/python-2-vs-python-3-practical-considerations-2[Python 2 против Python 3: Практические рекомендации]» для получения дополнительной информации о различиях между Python 2 и Python 3.

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

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

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

Мы можем преобразовывать числа в строки с помощью методаstr(). Мы передадим число или переменную в скобки метода, а затем это числовое значение будет преобразовано в строковое значение.

Давайте сначала посмотрим на преобразование целых чисел. Чтобы преобразовать целое число12 в строковое значение, вы можете передать12 в методstr():

При запускеstr(12) в интерактивной оболочке Python с командойpython в окне терминала вы получите следующий вывод:

Кавычки вокруг числа 12 означают, что число больше не является целым числом, а теперь является строковым значением.

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

user = "Sammy"
lines = 50

print("Congratulations, " + user + "! You just wrote " + lines + " lines of code.")

Когда мы запускаем этот код, мы получаем следующую ошибку:

OutputTypeError: Can't convert 'int' object to str implicitly

Мы не можем объединять строки и целые числа в Python, поэтому нам придется преобразовать переменнуюlines в строковое значение:

user = "Sammy"
lines = 50

print("Congratulations, " + user + "! You just wrote " + str(lines) + " lines of code.")

Теперь, когда мы запускаем код, мы получаем следующий вывод, который поздравляет нашего пользователя с его прогрессом:

OutputCongratulations, Sammy! You just wrote 50 lines of code.

Если мы хотим преобразовать число с плавающей точкой в ​​строку, а не целое число в строку, мы следуем тем же шагам и формату. Когда мы передаем float в методstr(), будет возвращено строковое значение float. Мы можем использовать либо само значение с плавающей точкой, либо переменную:

print(str(421.034))

f = 5524.53
print(str(f))

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

f = 5524.53
print("Sammy has " + str(f) + " points.")
OutputSammy has 5524.53 points.

Мы можем быть уверены, что наш float был правильно преобразован в строку, потому что конкатенация была выполнена без ошибок.

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

Строки можно преобразовать в числа с помощью методовint() иfloat().

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

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

lines_yesterday = "50"
lines_today = "108"

lines_more = lines_today - lines_yesterday

print(lines_more)
OutputTypeError: unsupported operand type(s) for -: 'str' and 'str'

Поскольку два числовых значения были сохранены в строках, мы получили ошибку. Операнд- для вычитания не является допустимым операндом для двух строковых значений.

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

lines_yesterday = "50"
lines_today = "108"

lines_more = int(lines_today) - int(lines_yesterday)

print(lines_more)

Переменнаяlines_more автоматически является целым числом, и в этом примере она равна числовому значению 58.

Мы также можем преобразовать числа в приведенном выше примере в значения с плавающей запятой, используя методfloat() вместо методаint(). Вместо получения вывода58 мы получим вывод58.0, число с плавающей запятой.

Пользователь Sammy зарабатывает баллы в десятичных значениях

total_points = "5524.53"
new_points = "45.30"

new_total_points = total_points + new_points

print(new_total_points)

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

Мы хотим преобразовать эти строки в числа с плавающей запятой перед выполнением любых математических операций с помощью методаfloat():

total_points = "5524.53"
new_points = "45.30"

new_total_points = float(total_points) + float(new_points)

print(new_total_points)

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

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

f = "54.23"
print(int(f))
OutputValueError: invalid literal for int() with base 10: '54.23'

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

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

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

Вы можете использовать методыlist() иtuple() для преобразования переданных им значений в тип данных списка и кортежа соответственно. В Python:

  • list — это изменяемая упорядоченная последовательность элементов, заключенная в квадратные скобки[ ].

  • tuple — это неизменяемая упорядоченная последовательность элементов, содержащихся в скобках( ).

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

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

print(tuple(['pull request', 'open source', 'repository', 'branch']))
Output('pull request', 'open source', 'repository', 'branch')

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

Давайте использоватьtuple() с переменной, представляющей список:

sea_creatures = ['shark', 'cuttlefish', 'squid', 'mantis shrimp']
print(tuple(sea_creatures))
Output('shark', 'cuttlefish', 'squid', 'mantis shrimp')

Опять же, мы видим, что значение списка изменяется на значение кортежа, указанное в скобках. Мы можем преобразовать любой итеративный тип в кортеж, включая строки:

Output('S', 'a', 'm', 'm', 'y')

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

OutputTypeError: 'int' object is not iterable

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

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

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

Мы будем использовать методlist() для преобразования следующего кортежа в список. Поскольку синтаксис для создания списка использует круглые скобки, не забудьте включить круглые скобки для методаlist(), а в данном случае также для методаprint():

print(list(('blue coral', 'staghorn coral', 'pillar coral')))
Output['blue coral', 'staghorn coral', 'pillar coral']

Квадратные скобки сигнализируют о том, что список был возвращен из исходного значения кортежа, переданного через методlist().

Чтобы сделать код более читабельным, мы можем удалить одну из пар скобок, используя переменную:

coral = ('blue coral', 'staghorn coral', 'pillar coral')
list(coral)

Если мы напечатаемlist(coral), мы получим тот же результат, что и выше.

Как и кортежи, строки можно преобразовать в списки:

Output['s', 'h', 'a', 'r', 'k']

Здесь строка'shark' была преобразована в список, предоставляя изменяемую версию исходного значения.

Заключение

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

Понравилась статья? Поделить с друзьями:

Читайте также:

  • Как изменить тип шрифта начертание шрифта размер шрифта цвет шрифта подчеркивание
  • Как изменить тип шрифта на телефоне
  • Как изменить тип шрифта на рабочем столе
  • Как изменить тип шифрования на роутере ростелеком
  • Как изменить тип шифрования на роутере кинетик

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии