【问题标题】:Accessing elements of nested list访问嵌套列表的元素
【发布时间】:2021-07-10 06:46:31
【问题描述】:

我的代码有什么问题:

l = ['a', ['bb', ['ccc', 'ddd'], 'ee', 'ff'], 'g', 'h']
for i in l:
  for j in i:
    print(j)`

输出是:

a
bb
['ccc', 'ddd']
ee
ff
g
h.

但我想要这个输出:

a
bb
ccc ddd
ee
ff
g
h.

应该做哪些改变?

【问题讨论】:

  • 测试j 是否是一个列表。如果是,请使用print(*j, sep=' ') 而不是print(j)
  • 你能描述一下你想遵循的规则吗?您遵循什么规则来决定将cccddd 打印在同一行,而其他所有内容都单独打印?
  • 感谢您的关注。我只想根据我的要求操纵输出。如果我想在下一行使用 ccc 和 ddd 怎么办?
  • 一个计算机程序只能遵循你给它的规则。如果您无法描述可以用来知道cccddd 应该放在一条线上而其他所有东西都应该放在一条线上的规则,那么您是在要求计算机(和我们)阅读您的心,这行不通。你怎么知道哪些项目应该放在一条线上,哪些应该放在各自的线上?

标签: python list nested element


【解决方案1】:

我假设规则是“打印列表l 中的每个项目或l 中的嵌套列表在其自己的行上,除非嵌套不包含子列表,在这种情况下,将其所有项目打印在一个上行之间有空格。”

如果正确,那么这段代码应该可以工作:

l = ['a', ['bb', ['ccc', 'ddd'], 'ee', 'ff'], 'g', 'h']
def print_list(lst):
    if not any(isinstance(x, list) for x in lst):
        # print list of strings on one line
        print(*lst)
        return
    # contains sublists; print or process items one by one
    for x in lst:
        if isinstance(x, list):
            print_list(x)  # process sub-list
        else:
            print(x)

print_list(l)

【讨论】:

    【解决方案2】:

    如果要在同一级别获取所有不同级别的数组值。在下面,一个例子可以解决你的问题

    def find_value(list_):
        for i in list_:
            if isinstance(i,list):
                for j in find_value(i):
                    yield j
            else:
                yield i
    l = ['a', ['bb', ['ccc', 'ddd'], 'ee', 'ff'], 'g', 'h']
    for i in find_value(l):
        print(i)
    

    你能提供更多关于你想要什么的信息吗?

    【讨论】:

      【解决方案3】:

      正如@Barmar 在 cmets 中提到的那样,j 可以被列出。 您可以使用isinstance 检查变量是否为特定类型

      l = ['a', ['bb', ['ccc', 'ddd'], 'ee', 'ff'], 'g', 'h']
      for i in l:
        for j in i:
            if isinstance(j,list):
                print(*j)
            else:
                print(j)
      

      【讨论】:

        【解决方案4】:

        我假设您有 3 维列表。

        l = ['a', ['bb', ['ccc', 'ddd'], 'ee', 'ff'], 'g', 'h']
        from functools import reduce
        
        for first in l:
            for sec in first:
                if type(sec) == type(list()):
                    iter = str(reduce(lambda x, y: str(x)+' '+str(y), sec))
                    print(iter)
                else:
                    print(sec)
        

        【讨论】:

          【解决方案5】:
          L = ['a', ['bb', ['ccc', 'ddd'], 'ee', 'ff'], 'g', 'h']
          k = 0
          for i in L:
              for j in i:
                  if k==2:
                      for r in j:
                          print(r)
                          k =k+1
                  else:
                      print(j)
                      k = k+1
                  
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-04-18
            • 2021-07-09
            • 2021-10-29
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多