在Python中展平字符串列表和字符串列表

参见英文答案 > How can I flatten lists without splitting strings?                                    4个
之前已经提出了类似的问题,但这些问题的解决方案对我的用例不起作用(例如,Making a flat list out of list of lists in PythonFlattening a shallow list in Python.我有一个字符串和列表的列表,其中嵌入列表也可以包含字符串和列表.我想要将其转换为简单的字符串列表,而不将字符串拆分为字符列表.

import itertools

list_of_menuitems = ['image10', ['image00', 'image01'], ['image02', ['image03', 'image04']]]
chain = itertools.chain(*list_of_menuitems)

结果清单:

['i', 'm', 'a', 'g', 'e', '1', '0', 'image00', 'image01', 'image02', ['image03', 'image04']]

预期结果:

['image10', 'image00', 'image01', 'image02', 'image03', 'image04']

什么是最好的(Pythonic)方法呢?

通过简单的修改,可以将经常重复的flatten功能应用于这种情况.

from collections import Iterable
def flatten(coll):
    for i in coll:
            if isinstance(i, Iterable) and not isinstance(i, basestring):
                for subc in flatten(i):
                    yield subc
            else:
                yield i

basestring将确保str和unicode对象都不会被拆分.

还有一些版本依赖于我没有__iter__属性.我不知道所有这些,因为我认为str现在具有该属性.但是,值得一提的是.

(请关注相关答案.)

https://stackoverflow.com/questions/17864466/flatten-a-list-of-strings-and-lists-of-strings-and-lists-in-python

转载注明原文:在Python中展平字符串列表和字符串列表