如何在Python中修改列表中的列表?

时间:2018-10-22 16:33:53

标签: python list uppercase

因此,我试图使列表中的元素变为大写,但是我无法使标准的something.upper()成为可能,因为列表中的列表。 外汇:

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

我该怎么做?

谢谢

3 个答案:

答案 0 :(得分:2)

检查元素是否为列表字符串类型

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()

答案 1 :(得分:0)

您可以按以下方式使用列表推导:

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 ]

答案 2 :(得分:0)

如果列表的深度事先未知,您可以尝试此操作。

输入

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']]

该函数仅检查类型,如果type是列表,则递归调用自身。找到字符串,int,float,long,bool或复杂类型时,它将继续返回文本的大写版本。所有其他类型都将被忽略。 (您可以在elif条件下添加/删除类型。请参见here

希望这会有所帮助:)