问题:编写递归函数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]
(数字不在子列表中)。
答案 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]