小能豆

格式化连续数字

py

我正在尝试使用 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

阅读 20

收藏
2024-11-15

共1个答案

小能豆

你的代码有一些问题,特别是在处理连续数字的部分。当前实现每次遇到两个连续的数字时,都在它们之间添加一个 -,这会导致输出错误。你需要追踪连续的数字并正确格式化这些数字范围。

以下是改进后的代码,能够按照你想要的方式格式化整数列表:

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)

解释:

  1. startend
  2. 用来追踪每个连续序列的开始和结束。每次遇到连续的数字时,我们更新 end 为当前数字。

  3. 检测到非连续数字时

  4. 当遇到数字不连续时(即当前数字和前一个数字不是连续的),我们检查 start 是否等于 end

    • 如果相等,说明这只是一个单一数字,我们直接将其添加到结果中。
    • 如果不相等,说明这是一个范围,我们将 startend 之间的数字区间(如 start-end)添加到结果中。
  5. 处理最后一个序列

  6. 在循环结束后,我们需要处理最后一个连续的数字序列,确保它被添加到结果中。

  7. 最终格式化

  8. 使用 ", ".join(result) 来将结果列表连接成一个字符串,数字区间用逗号分隔。

输出结果:

"1-3, 6, 8-9"

这个改进后的代码将正确处理连续的数字,并格式化成你期望的输出。

2024-11-15