Как мне изменить списки в списках в Python? - PullRequest
0 голосов
/ 22 октября 2018

Итак, я пытаюсь сделать свои элементы в моих списках заглавными, но я не могу сделать стандарт чем-то.FX:

names = [['henry', 'mike'],'jones', 'kevin',['michael', 'simon']]

Как мне это сделать?

Спасибо

Ответы [ 3 ]

0 голосов
/ 22 октября 2018

Вы можете использовать списочные выражения следующим образом:

uppercase_names = [ name.upper() if isinstance(name, str) else [n.upper() for n in name if isinstance(n, str)] for name in names ]

По сути, мы используем isinstance(name, str), чтобы проверить, является ли объект действительно строковым объектом.

В случае, если естьцелые числа в списке, вы можете использовать это сложное понимание:

uppercase_names = [ name.upper() if isinstance(name, str) else name if isinstance(name, int) else [ n.upper() if isinstance(n, str) else n if isinstance(n, int) else n for n in name ] for name in names ]
0 голосов
/ 22 октября 2018

Вы можете попробовать это, если глубина списка не известна заранее.

Ввод :

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. См. здесь )

Надеюсь, это поможет:)

0 голосов
/ 22 октября 2018

Проверьте, имеет ли элемент тип строки списка

for i in names:
    if isinstance(i,list):
        for inner_element in i:
            print(inner_element.upper())
    elif isinstance(i,str): # to handle the case if ints are also present
        print(i.upper())

Если вы хотите заменить значения в существующем списке

for index,i in enumerate(names):
    if isinstance(i,list):
        temp=[]
        for inner_element in i:
            temp.append(inner_element.upper())
        names[index]=temp
    elif isinstance(i,str):
        names[index]=i.upper()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...