如何在python中展平嵌套列表?

如何在python中展平嵌套列表?,python,Python,如何转换: THIS = \ ['logging', ['logging', 'loggers', ['logging', 'loggers', 'MYAPP', ['logging', 'loggers', 'MYAPP', '-handlers'], ['logging', 'loggers', 'MYAPP', 'propagate'] ] ], ['logging', 'version'] ] 进入: 在python中(它不需要排序,只需要展平) 我已经尝试了

如何转换:

THIS = \
['logging',
 ['logging', 'loggers',
  ['logging', 'loggers', 'MYAPP',
   ['logging', 'loggers', 'MYAPP', '-handlers'],
   ['logging', 'loggers', 'MYAPP', 'propagate']
  ]
 ],
 ['logging', 'version']
]
进入:

在python中(它不需要排序,只需要展平)


我已经尝试了很多方法,但找不到解决方法。

这就是递归函数真正发挥作用的地方:

def flatten(myList):
  def inner(current, acc):
    items = []
    for x in myList:
      if isinstance(x, list):
        acc.extend(inner(x, []))
      else:
        items.append(x)
    acc.extend(items)
    return acc

  return inner(myList, [])

我相信这应该可以解决问题。

用递归生成器解决

def flatten(items):
    non_list_items = []

    for item in items:
        if isinstance(item, list):
            for inner_item in flatten(item):
                yield inner_item
        else:
            non_list_items.append(item)

    yield non_list_items
根据您的输入进行测试:

from pprint import pprint

>>> pprint(sorted(flatten(THIS)))
[['logging'],
 ['logging', 'loggers'],
 ['logging', 'loggers', 'MYAPP'],
 ['logging', 'loggers', 'MYAPP', '-handlers'],
 ['logging', 'loggers', 'MYAPP', 'propagate'],
 ['logging', 'version']]

你看,特别是。还要谢谢你。我一直在努力得到这个
from pprint import pprint

>>> pprint(sorted(flatten(THIS)))
[['logging'],
 ['logging', 'loggers'],
 ['logging', 'loggers', 'MYAPP'],
 ['logging', 'loggers', 'MYAPP', '-handlers'],
 ['logging', 'loggers', 'MYAPP', 'propagate'],
 ['logging', 'version']]