访问嵌套列表中的元素。

3

我的代码有什么问题:

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.

需要做哪些更改?


2
测试j是否为列表。如果是,使用print(*j, sep=' ')而不是print(j) - Barmar
你能描述一下你想要遵循的规则吗?你遵循什么规则来决定在同一行打印 cccddd,而其他所有内容都单独成行呢? - Matthias Fripp
感谢您的关注。我只想根据我的要求来操作输出。如果我想让ccc和ddd在下一行呢? - M Suleman Tunio
一个计算机程序只能遵循你给它的规则。如果你无法描述一条规则来判断cccddd应该在同一行,而其它的内容则应该单独成行,那么你就是要求计算机(和我们)读你的心思,这是不现实的。你如何判断哪些项目应该放在同一行,哪些应该单独成行? - Matthias Fripp
5个回答

3

我认为这个规则是"逐行打印列表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)

1
如果您想在同一级别中获取不同层次的所有数组值。下面的示例可以解决您的问题。
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)

请提供更多关于您想要的内容的信息。


1

正如评论中@Barmar所提到的,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)

1
我假设你有一个三维列表。
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)

1
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
        

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接