Skip to main content
 首页 » 编程设计

列表中的python列表-为什么重复子列表

2025年05月04日31soundcode

问题:从给定的 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