为了账号安全,请及时绑定邮箱和手机立即绑定

如何在不分割字符串的情况下展平列表?

如何在不分割字符串的情况下展平列表?

慕仙森 2019-12-04 14:56:30
我想拼合可能包含其他列表的列表,但不要弄乱字符串。例如:In [39]: list( itertools.chain(*["cat", ["dog","bird"]]) )Out[39]: ['c', 'a', 't', 'dog', 'bird']我想['cat', 'dog', 'bird']
查看完整描述

3 回答

?
qq_笑_17

TA贡献1818条经验 获得超7个赞

def flatten(foo):

    for x in foo:

        if hasattr(x, '__iter__'):

            for y in flatten(x):

                yield y

        else:

            yield x

(__iter__与Python中几乎所有其他可迭代对象不同,字符串实际上实际上没有属性。但是请注意,这在Python 3中有所变化,因此上述代码仅在Python 2.x中有效。)


适用于Python 3.x的版本:

def flatten(foo):

    for x in foo:

        if hasattr(x, '__iter__') and not isinstance(x, str):

            for y in flatten(x):

                yield y

        else:

            yield x


查看完整回答
反对 回复 2019-12-04
?
largeQ

TA贡献2039条经验 获得超7个赞

对orip的答案进行了轻微修改,避免了创建中间列表:


import itertools

items = ['cat',['dog','bird']]

itertools.chain.from_iterable(itertools.repeat(x,1) if isinstance(x,str) else x for x in items)


查看完整回答
反对 回复 2019-12-04
?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

def squash(L):

    if L==[]:

        return []

    elif type(L[0]) == type(""):

        M = squash(L[1:])

        M.insert(0, L[0])

        return M

    elif type(L[0]) == type([]):

        M = squash(L[0])

        M.append(squash(L[1:]))

        return M


def flatten(L):

    return [i for i in squash(L) if i!= []]


>> flatten(["cat", ["dog","bird"]])

['cat', 'dog', 'bird']

希望这可以帮助


查看完整回答
反对 回复 2019-12-04
  • 3 回答
  • 0 关注
  • 415 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号