将字符串的元素添加到列表中(python)

问题描述:

该程序设计用于获取由数字(任意长度)组成的字符串,并将该字符串的内容输出到列表中,一次一位数字。如果数字x小于或等于前面的数字y,则数字x将被插入到子列表中。在数字z大于y之前,x和z之间的所有内容都将被添加到子列表中。下面是代码将字符串的元素添加到列表中(python)

def numbers_in_lists(string): 
    final = [] 
    temp = [] 
    prev = 0 

    for i in range(len(string)): 
     value = int(string[i]) 

     if value<=prev: 
      temp.append(value) 
     else: 
      if temp != []: 
       final.append(temp) 
       temp = [] 
      final.append(value) 
      prev = int(string[i]) 

    print final 
    return final 

为了测试这个功能,添加以下的代码的其余部分:

string = '543987' 
result = [5,[4,3],9,[8,7]] 
print repr(string), numbers_in_lists(string) == result 
string= '987654321' 
result = [9,[8,7,6,5,4,3,2,1]] 
print repr(string), numbers_in_lists(string) == result 
string = '455532123266' 
result = [4, 5, [5, 5, 3, 2, 1, 2, 3, 2], 6, [6]] 
print repr(string), numbers_in_lists(string) == result 
string = '123456789' 
result = [1, 2, 3, 4, 5, 6, 7, 8, 9] 
print repr(string), numbers_in_lists(string) == result 

后的代码创建并返回一个子表,它找到一个新的最大值,并没有按不要给列表添加任何其他内容,从而使最终列表不完整。

如果我用字符串'543987'的首选结果是[5,[4,3],9,[8,7]]而我的结果是[5,[4,3],9]

+1

那么你的问题是什么? – moritzg

+0

由于不清楚,所以更新了问题的结尾。基本上,列表不会自行填充,它只是在迭代完成子列表后停止。 –

您需要for循环结束后检查temp测试,它可能仍然包含的东西:

def numbers_in_lists(string): 
    final = [] 
    temp = [] 
    prev = 0 

    for digit in string: 
     value = int(digit) 

     if value<=prev: 
      temp.append(value) 
     else: 
      if temp: 
       final.append(temp) 
       temp = [] 
      final.append(value) 
      prev = int(digit) 

    if temp: 
     final.append(temp) 

    print final 
    return final 

我还稍微重新设置了for循环(无需使用索引访问)并用temp替代temp != [](请参见here)。