如何在Python中根据数值大小实现数组嵌套?含规则与示例
数组嵌套转换实现方案
需求说明
需要将数组按照以下规则进行嵌套转换:
- 当前数值大于前一个时,嵌套至更深层级
- 当前数值与前一个相等时,处于同一层级
示例:输入数组 [3,4,5,5,5,4],转换后结果为 [3,[4,[5,5,5],4]]
实现代码
def nest_list(lst): stack = [] for num in lst: if not stack or num > stack[-1][0]: stack.append([num]) elif num == stack[-1][0]: stack[-1].append(num) else: temp = stack.pop() while stack and num <= stack[-1][0]: temp = [stack.pop()[0], temp] stack.append([num, temp]) while len(stack) > 1: temp = stack.pop() stack[-1].append(temp) return stack[0]
代码逻辑解释
- 栈(stack)的作用:跟踪当前嵌套层级的头部元素及对应层级结构
- 遍历处理每个数字:
- 若栈为空,或当前数字大于栈顶列表的第一个元素(当前层级的头部值),则新建包含当前数字的列表加入栈,开启新嵌套层级
- 若当前数字等于栈顶列表的第一个元素,直接追加到栈顶列表中,保持同一层级
- 若当前数字小于栈顶列表的第一个元素,弹出栈顶元素作为临时结构,循环弹出栈中头部值大于等于当前数字的元素,将它们与临时结构合并成嵌套形式,直到找到头部值小于当前数字的栈元素,最后将当前数字与合并后的临时结构组成新列表加入栈
- 最终合并处理:遍历结束后,若栈中还有多个元素,依次弹出并合并到前一个元素中,最终栈中仅剩的元素即为目标嵌套数组
内容的提问来源于stack exchange,提问作者mbayne
相关产品推荐
相关产品推荐

