Как обойти все элементы (применить к ним метод) итерируемого объекта неизвестной глубины вложенности на python?

Пользователь

от jakayla , в категории: Python , 3 месяца назад

Как обойти все элементы (применить к ним метод) итерируемого объекта неизвестной глубины вложенности на python?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от sylvester , 3 месяца назад

@jakayla 

Для обхода всех элементов итерируемого объекта неизвестной глубины вложенности на Python можно использовать рекурсию. Например, для применения какого-то метода ко всем элементам можно написать следующую функцию:

1
2
3
4
5
6
7
8
9
def apply_method(obj, method):
    if isinstance(obj, list):
        for item in obj:
            apply_method(item, method)
    elif isinstance(obj, dict):
        for value in obj.values():
            apply_method(value, method)
    else:
        method(obj)


Эта функция принимает итерируемый объект obj и метод method. Если obj является списком, функция рекурсивно вызывает себя для каждого элемента списка. Если obj является словарем, функция рекурсивно вызывает себя для каждого значения в словаре. В противном случае, функция вызывает метод method для obj.


Пример использования:

1
2
my_list = [1, [2, 3], [4, [5, 6]]]
apply_method(my_list, print)


В результате будут выведены все элементы списка my_list.