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

列表中的python列表-为什么子列表重复,python,list,Python,List,问题:从给定的1-9的数字字符串创建一个列表,这样字符串中的每个数字都会插入到主列表中,并且后面的每个较小的数字都会插入到子列表中,直到找到一个大于前面数字的数字,然后将其插入到正常(主)列表中并继续 问题:例如字符串='654976'预期结果=[6[5,4],9[7,6]] 实际值=[6,5,4],[5,4],[9,7,6],[7,6]]这是因为您的continue语句 每次迭代后 for each in string: 您希望使用代码重新初始化子列表 sublist = [] 但是使用c

问题:从给定的1-9的数字字符串创建一个列表,这样字符串中的每个数字都会插入到主列表中,并且后面的每个较小的数字都会插入到子列表中,直到找到一个大于前面数字的数字,然后将其插入到正常(主)列表中并继续

问题:例如字符串='654976'预期结果=[6[5,4],9[7,6]]
实际值=[6,5,4],[5,4],[9,7,6],[7,6]]这是因为您的
continue
语句

每次迭代后

for each in string:
您希望使用代码重新初始化子列表

sublist = []
但是使用
continue
语句,您将跳过该步骤(因此,您将在下一次迭代中再次添加相同的列表)。确保在每个循环开始时重新初始化子列表:

for each in string:
    sublist = []
    ...

这是因为您的
continue
语句

每次迭代后

for each in string:
您希望使用代码重新初始化子列表

sublist = []
但是使用
continue
语句,您将跳过该步骤(因此,您将在下一次迭代中再次添加相同的列表)。确保在每个循环开始时重新初始化子列表:

for each in string:
    sublist = []
    ...

您将为子列表中的每个数字追加一次子列表。如果出现以下情况,则必须将
附加(子列表)
移到
之外:

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创建内部列表(字符串):
prev=0
mainlist=[]
子列表=[]
对于每个字符串:

如果int(each)您要为子列表中的每个数字追加一次子列表。如果出现以下情况,则必须将
附加(子列表)
移到
之外:

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创建内部列表(字符串):
prev=0
mainlist=[]
子列表=[]
对于每个字符串:

如果int(each)则每次看到子列表两次的原因是,每次发现低于上一个元素时,都会将子列表添加到主列表中

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)            <----- This code is executed once
            mainlist.append(sublist)  <-----  for each element you are 
            print(mainlist)           <-----  adding to the sublist
            continue
        sublist = []
        mainlist.append(int(each))
        prev = int(each)
    return mainlist
def创建内部列表(字符串):
mainlist=[]
prev=0
子列表=[]

如果len(string)则每次看到子列表两次的原因是,每次发现低于上一个元素时,都会将子列表添加到主列表中

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)            <----- This code is executed once
            mainlist.append(sublist)  <-----  for each element you are 
            print(mainlist)           <-----  adding to the sublist
            continue
        sublist = []
        mainlist.append(int(each))
        prev = int(each)
    return mainlist
def创建内部列表(字符串):
mainlist=[]
prev=0
子列表=[]
如果len(string)这个怎么样

def create_inner_list(string1):

    main_list = []

    for i in range(0, len(string1), 3):

        main_list.append(string1[i])

        if len(string1) - i == 2:
            main_list.append(string1[i+1])

        elif len(string1) - i == 1:
            break

        else:
            main_list.append(list(string1[i+1] + string1[i+2]))

    return main_list

def main():

    string2 = '714683241390'
    print create_inner_list(string2)

main()
这个怎么样

def create_inner_list(string1):

    main_list = []

    for i in range(0, len(string1), 3):

        main_list.append(string1[i])

        if len(string1) - i == 2:
            main_list.append(string1[i+1])

        elif len(string1) - i == 1:
            break

        else:
            main_list.append(list(string1[i+1] + string1[i+2]))

    return main_list

def main():

    string2 = '714683241390'
    print create_inner_list(string2)

main()

下面是另一个使用和“静态”变量的解决方案

import itertools as it

def group_f(value):
    value = int(value)
    if not hasattr(group_f, 'prev'):
        group_f.prev = 0
        group_f.g = False
    if value > group_f.prev:
        group_f.g = not group_f.g
    group_f.prev = value
    return group_f.g

def create_inner_list(s):
    res = []
    for _, values in it.groupby(s, group_f):
        res.append(next(values))
        res.append(list(values))
    return res

print(create_inner_list('654976'))
产生

['6', ['5', '4'], '9', ['7', '6']]
基本上,
groupf
在每个子序列上返回一个交替的真/假序列

groupby
使用它将原始输入值分组,从而将输入序列拆分为子序列


create_internal_list
使用这些元素形成一个新列表,将每个组的第一个元素和其余元素作为列表追加。

下面是另一个使用和“静态”变量的解决方案

import itertools as it

def group_f(value):
    value = int(value)
    if not hasattr(group_f, 'prev'):
        group_f.prev = 0
        group_f.g = False
    if value > group_f.prev:
        group_f.g = not group_f.g
    group_f.prev = value
    return group_f.g

def create_inner_list(s):
    res = []
    for _, values in it.groupby(s, group_f):
        res.append(next(values))
        res.append(list(values))
    return res

print(create_inner_list('654976'))
产生

['6', ['5', '4'], '9', ['7', '6']]
基本上,
groupf
在每个子序列上返回一个交替的真/假序列

groupby
使用它将原始输入值分组,从而将输入序列拆分为子序列


create_internal_list
使用这些元素形成一个新的列表,将每组的第一个元素和其余元素作为列表追加。

您的答案不符合问题中程序的逻辑(子列表中的所有元素都应低于前一个)。还有一个关于代码的答案(这只是为了提高你的答案质量,和否决票无关)我明白了,我的错。。。我想这个例子让我有点困惑:)你的答案没有遵循问题中程序的逻辑(子列表中的所有元素都应该低于前一个)。还有一个关于代码的答案(这只是为了提高你的答案质量,和否决票无关)我明白了,我的错。。。我想这个例子让我有点困惑:)谢谢@Daniel,我接受你的答案,尽管还有很多人的答案是正确的。谢谢@Daniel,我接受你的答案,尽管还有很多人的答案是正确的。谢谢@Pynchia,我很快就要学习itertools模块了+1谢谢@Pynchia,我很快就要学习itertools模块了+1.