Преобразование списка строк в список целых чисел в Python
В этом посте мы обсудим, как преобразовать список строк в список целых чисел в Python.
Например, список [«1», «2», «3», «4», «5»] следует преобразовать в список [1, 2, 3, 4, 5] .
1. Использование map() функция
Рекомендуемое решение — вызвать встроенную функцию map() для эффективного преобразования списка строк в список целых чисел. Он применяет указанную функцию к каждому элементу списка, получая результаты. Поскольку он возвращает итератор, преобразуйте результат в список. Эта функция показана ниже:
Split Integer Into Digits in Python
- Use List Comprehension to Split an Integer Into Digits in Python
- Use the math.ceil() and math.log() Functions to Split an Integer Into Digits in Python
- Use the map() and str.split() Functions to Split an Integer Into Digits in Python
- Use a for Loop to Split an Integer Into Digits in Python
- Conclusion
In this tutorial, we’ll explore different methods for splitting an integer into its individual digits in Python. We’ll discuss the following techniques to achieve this: using list comprehension, leveraging the math.ceil() and math.log() functions, employing the map() and str.split() functions, and creating a loop-based method.
Each method offers a unique approach to breaking down an integer into its constituent digits, catering to different programming scenarios and preferences.
Use List Comprehension to Split an Integer Into Digits in Python
List comprehension is a much shorter and more graceful way to create lists that are to be formed based on given values of an already existing list.
In this method, str() and int() functions are also used along with list comprehension to split the integer into digits. str() and int() functions are used to convert a number to a string and then to an integer respectively.
x = [int(a) for a in str(num)]
- num : This is the integer you want to split into its digits. It’s the input value for the list comprehension.
The syntax creates a new list by iterating through the characters of the string representation of the integer num . For each character a , the int() function is applied to convert it into an integer.
The result is a list x containing the individual digits of the original integer, where each character in the string becomes a separate element in the list.
The following code uses list comprehension to split an integer into digits in Python.
num = 13579 x = [int(a) for a in str(num)] print(x)
[1, 3, 5, 7, 9]
In the code, we start with the integer value 13579 stored in the variable num . To split this integer into its individual digits, we first convert it into a string using str(num) , resulting in the string «13579» .
Next, we use a list comprehension, [int(a) for a in str(num)] , to iterate through each character in the string and convert it back to an integer using int(a) . These integers are then stored in a list named x .
Finally, we print the contents of the list x , which gives us the output [1, 3, 5, 7, 9] .
Use the math.ceil() and math.log() Functions to Split an Integer Into Digits in Python
The operation of splitting the integer into digits in Python can be performed without converting the number to a string first. Moreover, this method is about twice as fast as converting it to a string first.
The math.ceil() function rounds off a number up to an integer, and the math.log() function provides the natural logarithm of a number. To use both these functions, we should import the math library.
The math module can be defined as an always accessible and standard module in Python. It provides access to the fundamental C library functions.
x = [(num // (10**i)) % 10 for i in range(places)]
- num : This parameter represents the integer you want to split into its digits.
- i : This variable is used within the list comprehension to iterate through a range of values, representing the positions of the digits in the integer.
- places : The places parameter defines the number of digits in the integer, which determines the range of i values to consider during the iteration.
The syntax represents a concise way to split an integer num into its individual digits in Python. It accomplishes this by iterating through a range of values from 0 to places — 1 , where each value corresponds to a digit’s position.
The expression (num // (10 ** i)) % 10 is applied for each position, effectively extracting the individual digit. These extracted digits are then collected in the list x , providing a compact and efficient method for breaking down an integer into its constituent digits.
The following code uses list comprehension, math.ceil() and math.log() functions to split an integer into digits in Python.
import math n = 13579 x = [(n // (10**i)) % 10 for i in range(math.ceil(math.log(n, 10)) - 1, -1, -1)] print(x)
[1, 3, 5, 7, 9]
In the code, we begin by importing the math module to access mathematical functions and constants. The integer 13579 is assigned to the variable n , representing the number we aim to split into its individual digits.
Next, we utilize a list comprehension to iterate through a range of indices i , each corresponding to the position of a digit in the number. For each index, we calculate the digit’s value by dividing the original number n by 10 raised to the power of i , resulting in (n // (10 ** i)) .
To isolate the individual digit, we take the remainder when dividing by 10 , which is achieved with ((n // (10 ** i)) % 10) . This process is executed for all relevant indices, as determined by the range generated using range(math.ceil(math.log(n, 10)) — 1, -1, -1) .
All extracted digits are then stored in the list x . Finally, we print the contents of the list x , which reveals the individual digits of the original number, producing the output [1, 3, 5, 7, 9] .
Use the map() and str.split() Functions to Split an Integer Into Digits in Python
The map() function implements a stated function for every item in an iterable. The item is then consigned as a parameter to the function.
The split() method, as the name suggests, is used to split a string into a list. It has a basic syntax and holds two parameters, the separator and the maxsplit .
The number needs to be already in the string format so that this method can be used.
list1 = str1.split() listofint = list(map(int, list1))
The parameter in the 1st line list1 = str1.split() :
- str1 : This is the input string that you want to split into a list. It contains space-separated numbers.
The parameters in the next line listofint = list(map(int, list1)) :
- int : This is a built-in function used for converting a string to an integer.
- list1 : This is the list of strings obtained after splitting the input string using the split() method.
The second line uses the map() and int() functions to convert the string list to an integer list.
The following code uses the map() and str.split() functions to split an integer into digits in Python.
str1 = "1 3 5 7 9" list1 = str1.split() map_object = map(int, list1) listofint = list(map_object) print(listofint)
[1, 3, 5, 7, 9]
In this code, we begin with the string str1 , which contains a sequence of space-separated numbers, specifically «1 3 5 7 9» . To extract and work with these numbers as integers, we first use the split() method on str1 , resulting in the creation of a list called list1 .
The list1 now holds individual number strings, which are «1», «3», «5», «7», and «9» . We proceed to apply the int function to each element within list1 using a map_object , effectively converting the strings to integers.
The resulting map object is then converted into a list called listofint . Finally, when we print listofint , the output showcases the integers from the original string, beautifully organized in the form of a list, displaying [1, 3, 5, 7, 9] .
This code adeptly transforms a space-separated string of numbers into a list of integers for further processing or analysis.
Use a for Loop to Split an Integer Into Digits in Python
In this method, we use a loop and perform the slicing technique till the specified number of digits ( A=1 in this case) and then finally, use the int() function for conversion into an integer.
The following code uses the int() , loop, and slice to split an integer into digits in Python.
str1 = "13579" A = 1 result = [] for i in range(0, len(str1), A): result.append(int(str1[i : i + A])) print("The resultant list : " + str(result))
The resultant list : [1, 3, 5, 7, 9]
In this code, we begin with the string str1 containing the sequence of numbers, specifically «13579» . The variable A is initialized to 1 , which dictates that we process the string character by character.
Next, we create an empty list named result to hold the individual digits that we’ll extract. To extract these digits, we utilize a for loop that iterates through the string.
Beginning at index 0 and advancing by A , which is 1 in this case, we extract a substring of length A from str1 , convert it into an integer using int() , and subsequently add it to the result list. Once the loop concludes, we print the content of the result list as a string, resulting in the output message The resultant list: [1, 3, 5, 7, 9] .
This code efficiently separates the string «13579» into its constituent digits and organizes them in a list, which is then displayed in the output message.
Conclusion
In this article, we looked at four different methods for splitting an integer into its component digits. We began by converting integers to strings and then back to integers using list comprehension and the str() and int() functions.
Following that, we provided a more mathematical technique that uses the math.ceil() and math.log() functions to avoid text translation. Next, we looked at a way to work with integers in string format that makes use of the map() and str.split() functions.
Lastly, we also demonstrated a loop-based method for splitting integers. You can easily manage and process integer values as individual digits in Python programs if you understand and utilize all these methods.
Vaibhhav is an IT professional who has a strong-hold in Python programming and various projects under his belt. He has an eagerness to discover new things and is a quick learner.
Copyright © 2023. All right reserved
Перевод списка строк в список чисел
Во многих языках когда используется цикл вида 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
47.8k 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 , то мы просто заменим то, на что она будет указывать на текущей итерации цикла:
Заметьте, что в массиве при этом ссылка не меняется, и нулевой элемент как указывал на строку «10» , так и продолжает на неё указывать:
![array[0] указывает всё ещё на старый объект](https://i.stack.imgur.com/iCM91.png)
Т.е. наша задача на самом деле заключается в том, чтобы заменить ссылку, хранящуюся в списке 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 , в которой нам нужно заменить ссылку:

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

Имея значение элемента, мы можем выполнить над ним интересующую нас операцию. Снова сохраним его в отдельной переменной.
new_value = int(old_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
Рассказываем о методе join() и других полезных инструментах для конвертирования Python‑списков в строки.


Иллюстрация: Оля Ежак для Skillbox Media

Иван Стуков
Журналист, изучает Python. Любит разбираться в мелочах, общаться с людьми и понимать их.
В Python существует два основных способа сделать из списка строку: с помощью цикла и с помощью метода join(). У обоих есть нюансы, о которых мы сейчас расскажем.
Преобразование с помощью цикла
Более понятный для новичка, но и более громоздкий способ перевести список в строку — воспользоваться циклом. Если вы уже знаете его и просто хотите узнать более эффективный и быстрый метод, то сразу переходите к следующему разделу. А если нет, то давайте разбираться.
Как это работает: мы создаём пустую строку, потом с помощью цикла переберём каждый элемент списка и на каждой итерации будем добавлять к строке текущий элемент списка.
lst = ['Преобразование','через','цикл'] #Создаём пустую строку string = '' #По очереди добавляем к ней каждый элемент списка for el in lst: string += el print(string) >>> Преобразованиечерезцикл
Однако такой код не будет работать, если в списке есть не только строки, но и, например, числа. Дело в том, что в Python нельзя смешивать данные разных типов.
Поэтому, перед тем как добавлять элемент в список, его нужно преобразовать в строку. Делается это с помощью функции str(). Добавим её в наш код.
#Создаём список, в котором есть как строки, так и цифры lst = ['Преобразование','через','цикл', 2] string = '' for el in lst: string += str(el) #Превращаем каждый элемент списка в строку print(string) >>> Преобразованиечерезцикл2
Если нужно установить разделитель между строками, то для него нужно прописать отдельную строчку кода внутри цикла.
lst = ['Преобразование','через','цикл', 3] string = '' for el in lst: #Добавляем к строке элемент списка string += str(el) #Добавляем к строке разделитель — в данном случае пробел string += ' ' print(string) >>> Преобразование через цикл 3
Обратите внимание: раз мы добавляем разделитель на каждой итерации, пробел будет и после цифры 3 нашего последнего элемента. Это легко проверить, если вместо пробела добавлять какой-то другой, видимый символ.
Эту проблему можно решить — ещё больше усложнив код. Например, введя условие, которое проверяет, последний это элемент в списке или нет. Однако гораздо проще и удобнее превратить список в строку, используя встроенный метод join().
Преобразование с помощью метода join()
Метод join(), по сути, делает всё то же самое, что и наш цикл, но лучше, удобнее и занимает всего одну строку. Вот как его применяют:
string.join(lst)
В качестве аргумента lst он получает список, элементы которого и будет объединять в строку, а string — это разделитель. Если мы не хотим его устанавливать, то в качестве string нужно указать пустую строку.
Посмотрим, как join() применяется на практике.
lst = ['Преобразование', 'через', 'метод', 'join()'] #Объединяем элементы списка с пустым разделителем print(''.join(lst)) >>> Преобразованиечерезметодjoin() #Устанавливаем пробел в качестве разделителя print(' '.join(lst)) >>> Преобразование через метод join()
Заметили особенность? Разделители ставятся только между элементами, а не после каждого элемента, как было в нашем цикле. join() — умница. Однако и тут есть ахиллесова пята: если в списке встречаются нестроковые элементы, мы получим ошибку. Чтобы этого избежать, надо опять-таки сначала превратить все нестроки в строки. Сделать это можно двумя способами.
Использовать выражение-генератор
Выражение-генератор — это конструкция, которая позволяет провести операцию над каждым элементом списка. Оно возвращает генератор, с которым метод join() обращается точно так же, как и со списками.
lst = [1, 1.2, 'строка', False] print(' '.join(str(el) for el in lst)) >>> 1 1.2 строка False
Конструкция str(el) for el in lst означает, что каждый элемент el в списке lst будет превращён в строку с помощью функции str (стандартной функции Python, которую мы уже использовали, когда работали с циклом).
Использовать функцию map()
Функция map() умеет делать то же самое, что и выражение-генератор, но их синтаксис отличается. В качестве первого аргумента она принимает саму операцию, в качестве второго — список, к элементам которого эта операция применяется.
lst = [1, 1.2, 'строка', False] print(' '.join(map(str, lst))) >>> 1 1.2 строка False
Конструкция map(str, lst) означает, что каждый элемент в списке lst будет превращён в строку с помощью функции str. Обратите внимание, что в качестве аргумента в map() передаётся только название функции, без скобок.
Итоги
Преобразовать список в строку можно с помощью цикла, но для этого есть и более удобный инструмент — метод join().
Если содержит нестроковые элементы, то их для начала придётся превратить в строки — иначе выскочит ошибка. Для этого можно воспользоваться выражением-генератором или функцией map().
Читайте также:
- Списки в Python: что это такое и как с ними работать
- Тест. Какой язык создадите вы — Java или Python?
- Язык Go: что под капотом и зачем программисту учить его как второй
