Все целые числа в строковом представлении перевести в int

Дан вложенный список. Максимальный уровень вложения - 3. Все элементы списка и подсписков представлены в виде строки.

data = [['Иванов', '1996', '01.01.1987'],
        '2023',
        ['5000110'],
        ['Видеокарта', 'GeForce 210', ['PCI-E 2.0', 'GDDR3', '460', 'DVI-I, HDMI, VGA (D-Sub)','2560x1600'], '3999', '1', '34', '17.56'],
        ['LGA 1700', '3xPCI-Ex16', 'TOMAHAWK WIFI', ['Alder Lake', 'Raptor Lake'], '256', ['305', '244'], 'мм', '19799']]

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

Результат представить в виде списка с корректированными значениями.

data = [['Иванов', '1996', '01.01.1987'],
        '2023',
        ['5000110'],
        ['Видеокарта', 'GeForce 210', ['PCI-E 2.0', 'GDDR3', '460', 'DVI-I, HDMI, VGA (D-Sub)','2560x1600'], '3999', '1', '34', '17.56'],
        ['LGA 1700', '3xPCI-Ex16', 'TOMAHAWK WIFI', ['Alder Lake', 'Raptor Lake'], '256', ['305', '244'], 'мм', '19799']]
a = input()
data.append(a)
for row in data:
    for j in row:
        for elem in j:
            if elem.isdigit():
                elem = int(elem)
print(data)

Ответы (1 шт):

Автор решения: mrBars1k
def convert(value):
    try:
        return int(value)
    except ValueError:
        try:
            return float(value)
        except ValueError:
            return value

def process_list(x):
    result = []
    for i in x:
        if isinstance(i, list):
            result.append(process_list(i))
        else:
            result.append(convert(i))
    return result

data = [['Иванов', '1996', '01.01.1987'],
        '2023',
        ['5000110'],
        ['Видеокарта', 'GeForce 210', ['PCI-E 2.0', 'GDDR3', '460', 'DVI-I, HDMI, VGA (D-Sub)','2560x1600'], '3999', '1', '34', '17.56'],
        ['LGA 1700', '3xPCI-Ex16', 'TOMAHAWK WIFI', ['Alder Lake', 'Raptor Lake'], '256', ['305', '244'], 'мм', '19799']]

user_input = input("Введите значение: ")
data.append(user_input)

result_data = process_list(data)

print(result_data)

Convert - берём строку и пытаемся преобразовать в число. Если невозможно, то оставляет исходные данные.

Process_list - рекурсивная функция принимает список и проходит по нему. Если элемент списка является подсписком, функция вызывает саму себя рекурсивно для обработки внутреннего списка. В противном случае, применяет convert к элементу.

Остальное понятно, думаю.

→ Ссылка