【问题标题】:How do i modify lists in lists in Python?如何在 Python 中修改列表中的列表?
【发布时间】:2018-10-22 16:33:53
【问题描述】:

所以,我正在尝试将列表中的元素设为大写,但我无法制作标准的 something.upper(),我猜测是因为列表中的列表。 特效:

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

我该怎么做?

谢谢

【问题讨论】:

  • 请在询问前尝试并提供minimal reproducible example
  • 真的不是二维列表;它只是一个列表,其中包含其他列表作为其一些元素。一个“真正的”二维列表至少有一个列表作为其元素的每个
  • names[0][0].upper()。当然,是否在子列表中取决于您自己。

标签: python list uppercase


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    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 ]
    

    【讨论】:

    • 如果列表中有整数怎么办?
    • 好的,如果它包含一个浮点数,它再次不起作用。无论如何,我认为这里不适合列出比赛。
    • 它实际上只在他的例子中起作用,更多的if 语句不会是一个更好的解决方案。
    【解决方案3】:

    如果事先不知道列表的深度,你可以试试这个。

    输入

    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 条件中添加/删除类型。参考here

    希望这会有所帮助:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-06
      • 2021-01-10
      • 1970-01-01
      • 2013-04-23
      • 1970-01-01
      • 2016-10-26
      • 2018-07-21
      • 1970-01-01
      相关资源
      最近更新 更多