如何将整数字符串拆分为整数列表,将整数字符串拆分为升序数字?

时间:2019-12-11 01:38:02

标签: python python-3.x for-loop

处理一个作业问题,要求输入0到9之间的任何给定整数字符串,并将其拆分为升序列表。例如,给定一个整数字符串,例如'455666777788888999999',我希望它返回[4, 5, 56, 66, 77, 778, 888, 899, 999],或者给定一个整数字符串,例如'045349',我希望它返回一个列表,例如{{1 }}。下一个整数仅必须严格大于前一个整数。任何不足够大而不能继续添加到不断增长的整数列表中的整数,都应该丢弃。

我知道通过列表理解,我可以将字符串转换为整数列表,其内容如下:[0, 4, 5, 34],但这会将字符串中的每个元素分解为列表中的单个元素。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:2)

这是一种减少/累加操作,因此列表组合并不十分合适。

这是一个幼稚的算法:保持运行中的数字累加器。每当当前总数大于结果列表的末尾或结果列表为空时,将累加器附加到结果列表中并清空累加器。

digits = "455666777788888999999"
res = []
accum = ""

for e in digits:
    accum += e

    if not res or int(accum) > res[-1]:
        res.append(int(accum))
        accum = ""

print(res) # => [4, 5, 56, 66, 77, 778, 888, 899, 999]

答案 1 :(得分:0)

我想到的第一件事就是使用递归。构造一个辅助函数,该函数需要与最小值进行比较,要拆分的字符串和结果数组。从头开始读取字符串,直到找到一个大于最小值的值,然后将此数字作为最小值传递,并将不包含该数字的字符串传递给下一个递归调用。或者,您可以将字符串保持静态,然后传递您所在的索引。

代码类似于:

void helper(minimum, int_string, result_arr):
    for i in range(1, len(int_string)):
        num = int(string[0:i])
        if num > minimum:
            result_arr.append(num)
            helper(num, string[i:], result_arr)

您可能要根据给定的问题处理一些极端情况,例如字符串的最后一位小于倒数第二个数字,或者给定的字符串为空。

答案 2 :(得分:0)

您可以尝试这个。

    def asc_split(s):
        r = [int(s[0])]
        s=s[1:]
        while int(s)>r[-1]:
            i=1
            while int(s[:i])<=r[-1]:i+=1
            r+=[int(s[:i])]
            s=s[i:]
        return r