给定一个字符串表示一个可以转成未知层数的list例如:123456我们需要取出最里面一层的上一层的数组的数据也就是56所在的那一层
可以使用递归来解决这个问题。具体思路如下:
-
首先判断当前字符串是否以"["开头,如果是,说明还有一层嵌套,需要进一步递归处理;否则,说明已经到了最里层,返回当前字符串对应的list。
-
如果当前字符串以"["开头,那么需要找到与之对应的"]"的位置,可以使用栈来实现。从字符串的第一个字符开始遍历,遇到"["就将其压入栈中,遇到"]"就将栈顶的"["弹出。当栈为空时,说明找到了与第一个"["对应的"]"的位置,此时将这两个位置之间的子字符串取出来,递归调用函数处理这个子字符串对应的list。
-
在递归调用返回之后,当前层的处理就可以继续了。如果当前层的list中包含多个子list,则需要对每个子list都进行递归处理,并将处理结果加入一个新的list中。最后返回这个新的list即可。
代码如下:
def get_innermost_list(data):
if data[0] != "[":
return None
stack = []
i = 0
while i < len(data):
if data[i] == "[":
stack.append("[")
elif data[i] == "]":
stack.pop()
if len(stack) == 0:
sub_data = data[1:i]
break
i += 1
else:
return None
sub_list = eval(sub_data)
if isinstance(sub_list, list):
result = []
for item in sub_list:
if isinstance(item, list):
innermost_list = get_innermost_list(str(item))
if innermost_list:
result.append(innermost_list)
return result
else:
return None
data = "[[[1,2],[3,4]],[5,6]]"
result = get_innermost_list(data)
print(result)
输出结果为:[[5, 6]]
原文地址: https://www.cveoy.top/t/topic/broV 著作权归作者所有。请勿转载和采集!