本文将围绕 Python 中的一个函数编程练习题进行详细的讲解和解答。
一、题目描述
实现一个函数,该函数的功能是将一个给定列表中的元素全部展开。例如:
flatten([1, 2, [3, 4, [5, 6], 7], [[[8]]]])
结果为:
[1, 2, 3, 4, 5, 6, 7, 8]
二、函数设计思路
1. 递归实现
使用递归可以比较简单地实现。
具体思路如下:
- 如果输入的列表为空,则返回空列表。
- 如果输入的列表的第一个元素不是列表类型,则将这个元素加到结果列表中。
- 如果输入的列表的第一个元素是列表类型,则对这个元素进行递归处理,将返回的结果列表添加到结果列表中。
- 对剩余的元素进行递归处理,将返回的结果列表添加到结果列表中。
代码如下:
def flatten(lst):
if not lst:
return []
if isinstance(lst[0], list):
return flatten(lst[0]) + flatten(lst[1:])
return lst[:1] + flatten(lst[1:])
2. 迭代实现
我们也可以使用迭代的方式实现。
具体思路如下:
- 初始化一个栈,将输入的列表放到栈中。
- 每次从栈中取出一个元素,如果这个元素为列表,则将其中的元素重新压入栈中。
- 如果这个元素不是列表,则将这个元素添加到结果列表中。
- 当栈为空时,结束循环。
代码如下:
def flatten(lst):
stack = [lst]
result = []
while stack:
item = stack.pop()
if isinstance(item, list):
stack.extend(item)
else:
result.append(item)
return result
三、函数测试
我们可以编写一些测试用例来验证函数的正确性。
assert flatten([1, 2, [3, 4, [5, 6], 7], [[[8]]]]) == [1, 2, 3, 4, 5, 6, 7, 8]
assert flatten([]) == []
assert flatten([[1]]) == [1]
assert flatten([1, 2, 3, 4]) == [1, 2, 3, 4]
四、总结
本文介绍了 Python 中的一个函数编程练习题,并给出了两种实现方式:递归和迭代。
通过本题的实践,我们可以加深对 Python 函数编程的了解,在实现过程中加深对递归和迭代的理解。