递归展平列表 [英] Flattening a list recursively

查看:62
本文介绍了递归展平列表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

可能重复:
用Python整理的(不规则的)列表列表

Possible Duplicate:
Flatten (an irregular) list of lists in Python

我在使用python递归展平列表时遇到麻烦.我已经看到了许多需要列表理解的方法,以及需要导入的各种方法,但是我正在寻找一种非常基本的方法来递归地变平具有不同深度的列表,该列表也不使用任何for循环. 我进行了一系列测试,但是有两项我无法通过

I am having trouble using python to recursively flatten a list. I have seen a number of methods that require list comprehension and various methods requiring imports however I am looking for a very basic method to recursively flatten a list of varying depth that does not use any for loops either. I had a series of test however there are two I cannot pass

flatten([[[[]]], [], [[]], [[], []]]) # empty multidimensional list
flatten([[1], [2, 3], [4, [5, [6, [7, [8]]]]]]) # multiple nested list

我的代码

def flatten(test_list):
    #define base case to exit recursive method
    if len(test_list) == 0:
       return []
    elif isinstance(test_list,list) and type(test_list[0]) in [int,str]:
        return [test_list[0]] + flatten(test_list[1:])
    elif isinstance(test_list,list) and isinstance(test_list[0],list):
        return test_list[0] + flatten(test_list[1:])
    else:
        return flatten(test_list[1:])

我会建议您.

推荐答案

这可以处理您的两种情况,我认为可以解决一般情况,而无需任何for循环:

This handles both of your cases, and I think will solve the general case, without any for loops:

def flatten(S):
    if S == []:
        return S
    if isinstance(S[0], list):
        return flatten(S[0]) + flatten(S[1:])
    return S[:1] + flatten(S[1:])

这篇关于递归展平列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆