Как преобразовать список строк в список чисел python
Перейти к содержимому

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

  • автор:

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

В этом посте мы обсудим, как преобразовать список строк в список целых чисел в Python.

Например, список [«1», «2», «3», «4», «5»] следует преобразовать в список [1, 2, 3, 4, 5] .

1. Использование map() функция

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

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

insolor's user avatar

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

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

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

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

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

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

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

insolor's user avatar

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

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

Создавая новый массив вместо старого

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Python | Converting all strings in list to integers

Interconversion between data types is facilitated by python libraries quite easily. But the problem of converting the entire list of strings to integers is quite common in the development domain. Let’s discuss a few ways to solve this particular problem.

Method 1: Using eval()

Python eval() function parse the expression argument and evaluate it as a python expression and runs Python expression(code), If the expression is an int representation, Python converts the argument to an integer.

Python3

Output:

Method 2: Naive Method

This is the most generic method that strikes any programmer while performing this kind of operation. Just looping over the whole list and converting each string of the list to int by type casting.

Python3

Output:

Method 3: Using list comprehension

This is just a kind of replica of the above method, just implemented using list comprehension, a kind of shorthand that a developer looks for always. It saves the time and complexity of coding a solution.

Python3

Output:

Method 4: Using map()

This is the most elegant, pythonic, and recommended method to perform this particular task. This function is exclusively made for this kind of task and should be used to perform them.

Python3

Output:

Method 5: List of strings with mixed integer representations

Here, we will first convert each string to a float first and then we will convert it into an integer by using the round() function, otherwise, it will throw error.

Python3

Output:

Method 6: Using the ast.literal_eval() function from the ast module

Another approach that can be used to convert a list of strings to a list of integers is using the ast.literal_eval() function from the ast module. This function allows you to evaluate a string as a Python literal, which means that it can parse and evaluate strings that contain Python expressions, such as numbers, lists, dictionaries, etc.

Here is an example of how to use ast.literal_eval() to convert a list of strings to a list of integers:

Python3

The time complexity of using the ast.literal_eval() function from the ast module to convert a list of strings to a list of integers is O(n), where n is the length of the list. This means that the time required to execute this approach is directly proportional to the size of the input list.

In terms of space complexity, this approach has a space complexity of O(n), because it creates a new list of integers that is the same size as the input list.

Approach: Using numpy.array() function

  1. Define a list of strings
  2. Convert the list to a numpy array of type int using the numpy.array() function
  3. Convert the numpy array back to a list using list() function
  4. Print the modified list

Python3

Output:

Time Complexity: The time complexity of this approach is O(n), where n is the length of the list. The numpy.array() function takes O(n) time to create a new array, and the list() function takes O(n) time to convert the array back to a list.

Space Complexity: The space complexity of this approach is O(n), because it creates a new numpy array of type int that is the same size as the input list.

Approach: Using the json.loads() function:

Algorithm:

  1. Create a list of strings test_list with the values [‘1’, ‘4’, ‘3’, ‘6’, ‘7’]
  2. Use the join() method to join the strings in test_list together with commas, resulting in the string ‘1,4,3,6,7’
  3. Add square brackets around the resulting string, resulting in the string ‘[1,4,3,6,7]’
    Use the loads() method from the json library to parse the string as a JSON array, resulting in the list [1, 4, 3, 6, 7]
  4. Assign the resulting list to new_list
  5. Print the string “Modified list is : ” followed by the string representation of new_list

Python3

The time complexity: O(n), where n is the length of test_list. This is because the join() method takes O(n) time to concatenate the strings, and the loads() method takes O(n) time to parse the resulting string.

The space complexity: O(n), since the resulting list takes up O(n) space in memory.

Approach: using re module

step-by-step algorithm for the regular expression approach to extract numerical values from a list of strings

  1. Define an input list of strings.
  2. Define a regular expression pattern to match numerical values in the strings.
  3. Initialize an empty list to store the converted numerical values.
  4. Iterate over each string in the input list.
  5. Use the regular expression pattern to search for a numerical value in the string.
  6. If a match is found, extract the matched substring and convert it to a float.
  7. Append the converted value to the output list.
  8. Once all strings in the input list have been processed, return the output list.

Python3

Time complexity: The time complexity of this approach is O(nm), where n is the number of strings in the input list and m is the maximum length of any string in the list. The regular expression pattern needs to be applied to each string in the list, which takes O(m) time in the worst case. Therefore, the overall time complexity is O(nm).
Auxiliary space complexity: The auxiliary space complexity of this approach is O(k), where k is the number of numerical values in the input list. We need to store each converted numerical value in the output list, which requires O(k) space. In addition, we need to store a regular expression object, which requires constant space. Therefore, the overall auxiliary space complexity is O(k).

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

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