8

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

3

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

У меня есть список строк, например: ['1', '2', '3']. Я хотел бы получить новый список целых чисел: [1, 2, 3]. Какие есть способы сделать это в Python?

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

5 ответ(ов)

0

Вы можете сделать это просто в одну строку, когда вводите данные:

[int(i) for i in input().split()]

Разделите строки, как вам нужно.

Если вы хотите преобразовать список, а не вводить данные, просто подставьте имя вашего списка на место input().split().

0

Вы можете легко преобразовать элементы списка строк в элементы типа int с помощью краткой записи циклов в Python.

Допустим, у вас есть строка result = ['1', '2', '3'].

Просто выполните следующий код:

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

На выходе вы получите:

[1, 2, 3]
0

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

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

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'] # множества неупорядочены, поэтому порядок может отличаться

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

0

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

Первый способ — использовать 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]

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

0

Вот простое решение с объяснением для вашего запроса.

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]

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

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь