Python: Как все элементы многомерного списка преобразовать в строки?

Есть многомерный список, пытаюсь каждый элемент типа int преобразовать в тип str, далее то что мне нужно по плану и вернуть обратно в int (дата[5] должна сохраниться str всегда(как исключение))



z = [[17, 800, 0, 1900, 0, '2021-10-16', 0], [16, 1300, 22, 1600, 44, '2021-10-14', 55]]

z_str = list(map(str, z)) # 1 пробовал

z_str = [str(i) for i in z] # 2 пробовал

print(z_str)

ВЫВОД:

["[17, 800, 0, 1900, 0, '2021-10-16', 0]", "[16, 1300, 22, 1600, 44, '2021-10-14', 55]"]

делает строку из списка в списке .о_О.

Мне нужно вот так:

[['17', '800', '0', '1900', '0', '2021-10-16', '0'], ['16', '1300', '22', '1600', '44', '2021-10-14', '55']]

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

Автор решения: Dmitry

Попробуйте такой вариант:

z = [[17, 800, 0, 1900, 0, '2021-10-16', 0], [16, 1300, 22, 1600, 44, '2021-10-14', 55]]
z_str = []
for i in z:

    z_str.append(list(map(str, i)))

print(z_str)

Циклом "извлекаем" подмножество и уже в нём, непосредственно, преобразуем элементы.

→ Ссылка
Автор решения: llollcat

Как писал выше asanisimov, нужно объединить два способа:

z = [[17, 800, 0, 1900, 0, '2021-10-16', 0], [16, 1300, 22, 1600, 44, '2021-10-14', 55]]

z_str = [list(map(str, i)) for i in z]

print(z_str)
→ Ссылка
Автор решения: Andy Pavlov

Я бы прошелся двойным циклом с проверкой на тип int содержимого. Если выполняется, то преобразуем в строку:

z = [[17, 800, 0, 1900, 0, '2021-10-16', 0], [16, 1300, 22, 1600, 44, '2021-10-14', 55]]

z_to_str = [[str(e) if isinstance(e, int) else e for e in row] for row in z]
→ Ссылка