Преобразование всех строк в списке в целые числа
Как мне преобразовать все строки в списке в целые числа?
У меня есть список строк, например: ['1', '2', '3']
. Я хотел бы получить новый список целых чисел: [1, 2, 3]
. Какие есть способы сделать это в Python?
Я пытался использовать различные методы, но получал ошибки или не тот результат. Если есть рабочий пример кода, буду признателен!
5 ответ(ов)
Вы можете сделать это просто в одну строку, когда вводите данные:
[int(i) for i in input().split()]
Разделите строки, как вам нужно.
Если вы хотите преобразовать список, а не вводить данные, просто подставьте имя вашего списка на место input().split()
.
Вы можете легко преобразовать элементы списка строк в элементы типа int с помощью краткой записи циклов в Python.
Допустим, у вас есть строка result = ['1', '2', '3']
.
Просто выполните следующий код:
result = [int(item) for item in result]
print(result)
На выходе вы получите:
[1, 2, 3]
Если ваш список содержит строки, представляющие собой целые числа, то предложенное решение будет работать. Однако оно завершится с ошибкой, если вы передадите ему элементы, которые не являются целыми числами.
Таким образом, если у вас есть данные, которые могут содержать как целые числа, так и дробные, а также другие типы, вы можете воспользоваться своей функцией с обработкой ошибок:
def maybeMakeNumber(s):
"""Преобразует строку 's' в целое число, если это возможно,
в дробное, если нужно, или возвращает строку как есть."""
# Обработка None, "", 0
if not s:
return s
try:
f = float(s)
i = int(f)
return i if f == i else f
except ValueError:
return s
data = ["unkind", "data", "42", 98, "47.11", "of mixed", "types"]
converted = list(map(maybeMakeNumber, data))
print(converted)
Вывод:
['unkind', 'data', 42, 98, 47.11, 'of mixed', 'types']
Чтобы также обрабатывать итерируемые объекты внутри итерируемых, вы можете использовать следующий вспомогательный метод:
from collections.abc import Iterable, Mapping
def convertEr(iterab):
"""Пытается преобразовать итерируемый объект в список с числами (float, int) или оригинальными элементами
из итерируемого объекта. Преобразует любые итерируемые (кортежи, множества и т.д.) в аналогичные в выводе.
Не работает для отображений - нужно будет проверять abc.Mapping и обрабатывать
такие вещи, как {1:42, "1":84}, чтобы они выходили как есть."""
if isinstance(iterab, str):
return maybeMakeNumber(iterab)
if isinstance(iterab, Mapping):
return iterab
if isinstance(iterab, Iterable):
return iterab.__class__(convertEr(p) for p in iterab)
data = ["unkind", {1: 3,"1":42}, "data", "42", 98, "47.11", "of mixed",
("0", "8", {"15", "things"}, "3.141"), "types"]
converted = convertEr(data)
print(converted)
Вывод:
['unkind', {1: 3, '1': 42}, 'data', 42, 98, 47.11, 'of mixed',
(0, 8, {'things', 15}, 3.141), 'types'] # множества неупорядочены, поэтому порядок может отличаться
Таким образом, вы можете обрабатывать сложные структуры данных, сохраняя оригинальные элементы или преобразуя их в числа, если это возможно.
Ваш вопрос об преобразовании списка строк в список целых чисел интересен, и я рад помочь с примером. Ниже приведены два способа выполнения этой задачи.
Первый способ — использовать while
цикл, который немного более развернут, чем генераторы списков, но также эффективен и понятен:
def str_list_to_int_list(str_list):
n = 0
while n < len(str_list):
str_list[n] = int(str_list[n])
n += 1
return str_list
В этом коде мы проходим по каждому элементу входного списка str_list
, преобразуем его в целое число с помощью int()
и обновляем соответствующий элемент в том же списке. После завершения цикла возвращаем изменённый список.
Например:
>>> results = ["1", "2", "3"]
>>> str_list_to_int_list(results)
[1, 2, 3]
Второй способ — использовать генератор списков, который является более компактным и "питоническим" подходом:
def str_list_to_int_list(str_list):
int_list = [int(n) for n in str_list]
return int_list
Здесь мы создаем новый список int_list
, используя выражение генератора для преобразования каждого элемента n
из входного списка str_list
в целое число.
Этот подход также дает тот же результат:
>>> results = ["1", "2", "3"]
>>> str_list_to_int_list(results)
[1, 2, 3]
Выбор между этими двумя способами зависит от ваших предпочтений. Если вам нужно вносить изменения непосредственно в исходный список, то первый метод будет более подходящим. Если же предпочтительнее создать новый список, то лучше использовать второй метод.
Вот простое решение с объяснением для вашего запроса.
a = ['1', '2', '3', '4', '5'] # Целые числа представлены в виде строк в этом списке
b = [] # Новый список
for i in a: # Объявляем переменную (i) как элемент в списке (a).
b.append(int(i)) # Смотрите ниже для объяснения
print(b)
Здесь append() используется для добавления элементов (т.е. целочисленной версии строки (i) в этой программе) в конец списка (b).
Примечание: int() - это функция, которая помогает преобразовать целое число, представленное в виде строки, обратно в его целочисленное представление.
Консольный вывод:
[1, 2, 3, 4, 5]
Таким образом, мы можем конвертировать строковые элементы в списке в целые числа только в том случае, если данная строка полностью состоит из цифр, в противном случае будет сгенерирована ошибка.
Почему используется string.join(list), а не list.join(string)?
Удалить пустые строки из списка строк
Как преобразовать строковое представление списка в список?
Диапазон букв в Python
Как создать строку с разделением запятой из списка строк?