Как заполнить вложенный список определенным значением в python?
У меня есть список со вложенными списками, довольно глубокий. И мне потребовалось создать список с такой же структурой, но заполненный одним значением.
Исходный список:
field = [
[[1, 2, 3], [2, 3, 4], [[2, 3, 4], [1, 2]], 3],
[1, 2, 2],
4
]
Что хочу получить:
field2 = fillDeepList(field2, 0);
# [
# [[0, 0, 0],[0, 0, 0],[[0, 0, 0],[0, 0]],0],
# [0, 0, 0],
# 0
# ]
Я поискал, но ничего дельного не нашел. Нашел только то, что в модуле copy есть функция deepcopy для копирования вложенных списков.
По итогу я написал вот такую функцию:
def fillDeepList(field, value):
if isinstance(field, Iterable):
return [fillDeepList(i, value) for i in field]
else:
return value
Она вроде бы нормально работает. Может что-то подобное уже есть в каком-нибудь модуле в коробке?
Ответы (2 шт):
Автор решения: gil9red
→ Ссылка
Рекурсией обходим структуру, меняя значение:
def deep_fill(items: list, value):
for i in range(len(items)):
if isinstance(items[i], list):
deep_fill(items[i], value)
else:
items[i] = value
field = [
[[1, 2, 3], [2, 3, 4], [[2, 3, 4], [1, 2]], 3],
[1, 2, 2],
4
]
deep_fill(field, 0)
print(field)
# [[[0, 0, 0], [0, 0, 0], [[0, 0, 0], [0, 0]], 0], [0, 0, 0], 0]
Автор решения: Денис Степанов
→ Ссылка
Ничего так и не нашел, получилось только немного подсократить запись:
from collections.abc import Iterable
field = [[[1, 2, 3], [2, 3, 4], [[2, 3, 4], [1, 2]], 3], [1, 2, 2], 4]
def deep_fill(items, value):
return [deep_fill(x, value) for x in items] if isinstance(items, Iterable) else value
filled_field = deep_fill(field, 0)
print(filled_field)
# [[[0, 0, 0], [0, 0, 0], [[0, 0, 0], [0, 0]], 0], [0, 0, 0], 0]