Python 如何将连续日期分组,以创建一个较短的字符串,表示列表中的所有数字?

Python 如何将连续日期分组,以创建一个较短的字符串,表示列表中的所有数字?,python,list,numbers,Python,List,Numbers,如何将连续日期分组为较短的字符串格式,例如: date_list = ['2016-01-01', '2017-01-01', '2017-01-02', '2017-01-03', '2017-01-05'] 我想把那个日期列表变成如下 desired_output = "1/1/16,1/1/17-1/3/17,1/1/17" 我尝试从这里实现解决方案,方法是使用一个计算日期差的函数,运气不好:在用python编写脚本来完成此任务之前,让我们看看如何手动完成此任务。让我们遵循给定的算法,

如何将连续日期分组为较短的字符串格式,例如:

date_list = ['2016-01-01', '2017-01-01', '2017-01-02', '2017-01-03', '2017-01-05']
我想把那个日期列表变成如下

desired_output = "1/1/16,1/1/17-1/3/17,1/1/17"

我尝试从这里实现解决方案,方法是使用一个计算日期差的函数,运气不好:

在用python编写脚本来完成此任务之前,让我们看看如何手动完成此任务。让我们遵循给定的算法,看看它是如何工作的

程序

步骤0:获取一个名为
output\u string
的空字符串

步骤1:获取一个空的
序列列表

第2步:
编号列表
开始处提取元素(编号),查看是否可以将其添加到
序列列表
,然后将编号添加到
序列列表
并将其从
编号列表
中删除,然后重复第2步。否则,请转至步骤3

步骤3:
序列列表压缩为字符串,并将其添加到输出中

步骤4:如果
编号列表不为空,请再次转到步骤1。否则,显示
输出字符串

例如,让我们对有问题的列表进行一次迭代

number\u list=[1,2,3,4,5,9,10,11,12,18,19,40]

步骤0后:

output\u string=”“

第1步之后:

sequence\u list=[]

第2步之后:(迭代5次)

因为我们的下一个元素是9,我们无法将其添加到序列列表中,所以我们转到步骤3

output_string = "1-5"
number_list = [9,10,11,12,18,19,40]
第3步之后

output_string = "1-5"
number_list = [9,10,11,12,18,19,40]
在第4步

由于我们的
编号\u列表
不是空的,我们返回到步骤1,整个过程再重复3次。然后我们得到以下
输出\u字符串

output\u string=“1-5,9-12,18-19,40”

这是我们需要的输出。那么,我们完成了

相同的Python脚本:

def numlist_string(numlist):
    # If the length of list is 1 then we don't need to write it in the 
    # form x-y, because that increases the number characters in string
    if(len(numlist) == 1):
        return "{}".format(numlist[0])
    else:
        numlist_last = len(numlist) - 1
        return "{}-{}".format(numlist[0], numlist[numlist_last])

def numlist_compress(numlist):
    if(len(numlist) == 0):
        return []

    compressed_list = []
    for i in range(len(numlist)):
        if(numlist[i] != numlist[0] + i):
            # Sequence is broken

            # Splitting up list into sequence and remaining
            req_list = numlist[0 : i]
            rem_list = numlist[i : ]

            # Getting sequence list as a string
            numlist_s = numlist_string(req_list)

            # Adding sequence string to the list of strings
            compressed_list.append(numlist_s)

            # Compressing the remaining list and adding that to previously 
            # generated sequence string
            compressed_list.extend(numlist_compress(rem_list))

            return compressed_list

    # Whole list is a sequence
    numlist_s = numlist_string(numlist)
    compressed_list.append(numlist_s)

    return compressed_list

if __name__ == '__main__':
    number_list = [1,2,3,4,5,9,10,11,12,18,19,40]

    sequence_list = numlist_compress(number_list)

    sequence_string = ','.join(sequence_list) 

    print(sequence_string)

可能重复感谢-我试图应用这些解决方案,但我遇到的挑战是我实际上在处理日期,所以我更新了我的问题相同的原则只适用于你必须使用
datetime
对象,最有可能是正确的-这也是我的想法,但它不能生成正确的组。我也可以发布我尝试过的问题: