sample = ["a", "b", ["c", ["d", "e"], "f"]]
desired = ["ab", ["c", ["de"], "f"]]
def mergeList(array):
ret = [] #final array
newEl = "" #merged element
for el in array:
#If the element is a list, add our merged element and then
#call the mergeList function on our list
if type(el) == list:
ret.append(newEl)
newEl = "" #clear the merged element so we can start over
ret.append(mergeList(el))
else:
newEl += str(el) #Add to the merged element
#Final merge
if newEl != "":
ret.append(newEl)
return ret
print(mergeList(sample))
l = ["a", "b", ["c", ["d", "e"], "f"]]
def nested2str(s):
res = []
tmp = []
val = None
for i in s:
if type(i)==str:
tmp.append(i)
else:
res.append(''.join(tmp))
tmp = []
val = nested2str(i)
res.append(val)
if tmp!=[]:
res.append(''.join(tmp))
return res
result = nested2str(l)
print(result)
from itertools import groupby as gb
d = ["a", "b", ["c", ["d", "e"], "f"]]
def combine(d1):
return [i for a, b in gb(d1, key=str.__instancecheck__)
for i in ([''.join(b)] if a else map(combine, b))]
print(combine(d))
您尝试使用递归来解决问题是正确的。以下是我如何设计我的功能:
mergedList
函数将尝试逐个组合元素,直到到达列表。当它最终到达一个列表时,它将首先将组合元素存储到一个新列表中,然后使用新列表重复该过程并存储该结果。在处理之后,它将继续我做了一个粗略的图表,我认为可以解释这一点。每个级别代表一个较小列表上的新递归调用。粗体字母表示变量
newEl
,该变量包含累加每个元素的字符串使用递归,您可以通过这种方式实现
输出
可以将
itertools.groupby
与递归一起使用:输出:
相关问题 更多 >
编程相关推荐