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
对象,最有可能是正确的-这也是我的想法,但它不能生成正确的组。我也可以发布我尝试过的问题: