Преобразование значений списка «Pre-Zipped» в целые числа - PullRequest
1 голос
/ 20 апреля 2019

У меня часто есть список «предварительно сжатых» данных (элементы - списки). Я пытаюсь преобразовать каждый элемент в целое число (обычно из входной строки).

Как я могу превратить каждый элемент в сложном списке в целое число?

Сначала я попытался понять список:

ls = ["1", "2", ["3", "4", "5"], "6"]
ls = [int(i) for i in ls]

Но функция int не может быть повторяемой, поэтому она разбивается на int (["3", "4", "5"])

1010 *
*

Осмотревшись, я узнал о функции map (), которая применяет функцию к каждому элементу в итерируемой.

ls = ["1", "2", ["3", "4", "5"], "6"]

print(map(lambda x: int(x), ls))

Вышеприведенный код выводит

<map object at 0x000001A84C46E898>

Но когда я пытаюсь преобразовать это в список, я получаю сообщение об ошибке

ls = ["1", "2", ["3", "4", "5"], "6"]

print(list(map(lambda x: int(x), ls)))
TypeError: int() argument must be a string, a bytes-like object or a number, not 'list'

Для меня это звучит так, будто map передает функции int () список. Я также попробовал itertools.starmap ():

import itertools

ls = ["1", "2", ["3", "4", "5"], "6"]

print(list(itertools.starmap(lambda x: int(x), ls)))

Это, однако, похоже, ведет себя так же, как map (): возвращает объект карты, который не может быть преобразован в список.


Помощь очень ценится. Спасибо!

1 Ответ

0 голосов
/ 21 апреля 2019

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

def makeInt(data):
    try:
        k = int(data)
    except ValueError:
        k = [makeInt(d) for d in data]
    return k

ls = ["1", "2", ["3", "4", "5"], "6"]

t = makeInt(ls)
print(t) 

Вывод:

[1, 2, [3, 4, 5], 6]

Это все равно не удастся, если вы предоставите нецелые данные в свойсписки.

...