递归地展平列表 - 为什么我的代码不能返回我想要的?

时间:2015-05-14 13:44:20

标签: python-3.x recursion

问题:编写递归函数flattenList,其中flattenList([2, 9, [2, 1, 13, 2], 8, [2, 6]])将返回列表[2, 9, 2, 1, 13, 2, 8, 2, 6]

我的代码

def flattenList(lis):
    a = []
    for i in lis:
        if not isinstance(i, list):
            a.append(i)
        else:
            flattenList(i)
    return a

print(flattenList([2, 9, [2, 1, 13, 2], 8, [2, 6]]))

虽然所需的输出为[2, 9, 2, 1, 13, 2, 8, 2, 6],但我得到[2, 9, 8](数字不在子列表中)。

3 个答案:

答案 0 :(得分:0)

您需要添加a.extend(flattenList(i))。你现在对递归返回一无所知。

答案 1 :(得分:0)

您的递归调用不会将数据添加到结果列表中。所以这个:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">


<hibernate-mapping>
   <class name="com.naveen.java.Employee" table="EMP558">

      <id name="id" type="int" column="id">
         <generator class="native"/>
      </id>
      <property name="firstName" column="NAME" type="string"/>
      <property name="lastName" column="LASTNAME" type="string"/>
      <property name="salary" column="salary" type="double"/>
   </class>
</hibernate-mapping>

应该是:

flattenList(i)

答案 2 :(得分:0)

您可以将函数设置为生成器并使用python3中的yield from语法:

def flattenList(lis):
    for i in lis:
        if not isinstance(i, list):
            yield i
        else:
            yield from flattenList(i)


print(list(flattenList([2, 9, [2, 1, 13, 2], 8, [2, 6]])))
[2, 9, 2, 1, 13, 2, 8, 2, 6]