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

2024-05-16 11:13:10 发布

您现在位置: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"

我尝试从这里实现解决方案,使用一个计算日期差的函数:Identify groups of continuous numbers in a list


Tags: of函数字符串inoutputdate格式解决方案
1条回答
网友
1楼 · 发布于 2024-05-16 11:13:10

在用python编写一个脚本来完成这个任务之前,让我们看看如何手动完成这个任务。让我们按照给定的算法,看看它是如何工作的。你知道吗

Procedure:

Step 0: Take an empty string, named output_string.

Step 1: Take an empty sequence_list.

Step 2: Take the element (number) at the start of number_list, see if it can be added to sequence_list, then add the number to the sequence_list and remove it from number_list, and repeat Step 2. Otherwise, go to Step 3.

Step 3: Compress sequence_list to a string, and add it to output.

Step 4: If number_list is not empty, go to Step 1 again. Otherwise, display the output_string.

例如,让我们对有问题的列表进行一次迭代。你知道吗

number_list = [1,2,3,4,5,9,10,11,12,18,19,40]

步骤0后:

output_string = ""

步骤1之后:

sequence_list = []

第2步后:(迭代5次)

sequence_list = [1, 2, 3, 4, 5]
number_list = [9,10,11,12,18,19,40]

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

第3步之后

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

第4步

因为我们的number_list不是空的,所以我们返回到步骤1,整个过程再重复3次。在这之后,我们得到以下output_string

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

相关问题 更多 >