问题:从给定的 1-9 数字字符串创建一个列表,这样字符串中的每个数字都被插入到主列表中,每个后面较小的数字将被插入到子列表中,直到找到比然后将其插入到正常(主)列表中并继续。
question: ex. string = '654976' expected result = [6,[5,4],9,[7,6]] actual = [6,[5,4],[5,4],9,[7,6],[7,6]] <= why is sublist is repeated?
def create_inner_list(string):
mainlist = []
prev = 0
sublist = []
if len(string) <= 1
return mainlist.append(string)
for each in string:
if int(each) <= prev:
prev = int(each)
sublist.append(int(each))
print(sublist)
mainlist.append(sublist)
print(mainlist)
continue
sublist = []
mainlist.append(int(each))
prev = int(each)
return mainlist
我也曾尝试在字符串上使用拆分方法,但没有太大帮助,或者不完全理解如何使用它。希望它是清楚的。提前致谢。
请您参考如下方法:
您为子列表中的每个数字附加一次子列表。您必须将 append(sublist) 移到 if 之外:
def create_inner_list(string):
prev = 0
mainlist = []
sublist = []
for each in string:
if int(each) <= prev:
prev = int(each)
sublist.append(int(each))
else:
if sublist:
mainlist.append(sublist)
sublist = []
mainlist.append(int(each))
prev = int(each)
if sublist:
mainlist.append(sublist)
return mainlist
或者更复杂一点:
def create_inner_list(string):
prev = 0
current_list = mainlist = []
for each in string:
if int(each) <= prev:
if current_list is mainlist:
current_list = []
mainlist.append(current_list)
else:
current_list = mainlist
prev = int(each)
current_list.append(prev)
return mainlist
