Вы можете попробовать это, если глубина списка не известна заранее.
Ввод :
names=['jones', 'kevin', ['henry', 37, ['a', 0.69999]], ['michael', True]]
Функция :
def recursive_upper(names):
ret_list=[]
for x in names:
if isinstance(x, list):
ret_list.append(recursive_upper(x))
elif (isinstance(x, basestring) or isinstance(x, int) or isinstance(x, float) \
or isinstance(x, long) or isinstance(x, bool) or isinstance(x, complex)):
ret_list.append(str(x).upper())
return ret_list
print recursive_func(names)
Выходные данные :
['JONES', 'KEVIN', ['HENRY', '37', ['A', '0.69999']], ['MICHAEL', 'TRUE']]
Функция просто проверяет тип и рекурсивно вызывает себя, если тип является списком.Он продолжает возвращать версию текста в верхнем регистре, когда находит строку, int, float, long, bool или сложный тип.Все остальные типы просто игнорируются.(Вы можете добавлять / удалять типы в условии elif. См. здесь )
Надеюсь, это поможет:)