我正在尝试使用 Python 格式化整数列表,但在实现我想要的效果时遇到了一些困难。
输入是整数的排序列表:
list = [1, 2, 3, 6, 8, 9]
我希望它的输出是一个如下所示的字符串:
outputString = "1-3, 6, 8-9"
到目前为止我所取得的成就是:
outputString = "1-2-3, 6, 8-9"
如果 Int 已经是连续的,那么我很难告诉我的代码忽略它。
这是我目前的代码:
def format(l): i = 0 outputString = str(l[i]) for x in range(len(l)-1): if l[i + 1] == l[i]+1 : outputString += '-' + str(l[i+1]) else : outputString += ', ' + str(l[i+1]) i = i + 1 return outputString
你的代码有一些问题,特别是在处理连续数字的部分。当前实现每次遇到两个连续的数字时,都在它们之间添加一个 -,这会导致输出错误。你需要追踪连续的数字并正确格式化这些数字范围。
-
以下是改进后的代码,能够按照你想要的方式格式化整数列表:
def format(l): if not l: return "" result = [] # 用于存储格式化后的数字 start = l[0] # 记录连续序列的开始 end = l[0] # 记录连续序列的结束 for i in range(1, len(l)): # 如果当前数字和上一个数字是连续的,则更新结束值 if l[i] == l[i - 1] + 1: end = l[i] else: # 如果当前序列只有一个数字,直接添加 if start == end: result.append(str(start)) else: # 如果当前序列有多个数字,添加范围 result.append(f"{start}-{end}") start = l[i] # 更新开始值 end = l[i] # 更新结束值 # 添加最后一个序列或数字 if start == end: result.append(str(start)) else: result.append(f"{start}-{end}") return ", ".join(result) # 用逗号连接格式化后的字符串 # 测试 lst = [1, 2, 3, 6, 8, 9] outputString = format(lst) print(outputString)
start
end
用来追踪每个连续序列的开始和结束。每次遇到连续的数字时,我们更新 end 为当前数字。
检测到非连续数字时:
当遇到数字不连续时(即当前数字和前一个数字不是连续的),我们检查 start 是否等于 end:
start-end
处理最后一个序列:
在循环结束后,我们需要处理最后一个连续的数字序列,确保它被添加到结果中。
最终格式化:
", ".join(result)
"1-3, 6, 8-9"
这个改进后的代码将正确处理连续的数字,并格式化成你期望的输出。