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

时间:2017-06-14 06:01:11

标签: python list

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

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 个答案:

答案 0 :(得分:2)

您需要在temp循环结束后检查for,它可能仍包含某些内容:

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)。