python-3.x 递增整数的所有中点

envsm3lx  于 2023-04-08  发布在  Python
关注(0)|答案(1)|浏览(129)

我想创建一个列表解析或一个接受int值的for/while循环(k)然后继续追加中点,直到列表的长度为(k).因此该列表必须来自(0至k-1)和(0到9),k= 10。首先,它将首先附加中点5,即10//2。然后,它将追加2,因为索引0和4之间的中点是2,6和10之间的中点是8。这将继续下去,直到所有的值范围0到9(包括)都存在于列表中。注意,它将是一个整数列表,而不是浮点数。我尝试使用原生python并且不使用任何外部库来实现这一点。下面的代码不起作用,我怎么能这样做呢?下面的测试用例显示了预期输出的输入。
验证码:

k = 10 
output = [k // 2] # initial midpoint

while len(output) != k:
     formatted_list = [0] + output + [k]
     for c,x in enumerate(formatted_list[:-1]):
        output.append((formatted_list[c+1] - x) //2)

输入:

k = 10

预期输出:

[5,2,8,1,4,7,9,0,3,6]

输入:

k = 11

预期输出:

[5,2,8,1,4,7,10,0,3,6,9]
3htmauhk

3htmauhk1#

下面的代码应该适用于您的情况

k = 10
midpoints = [k // 2]
# Start with the midpoint of the full range

while len(midpoints) < k:

    # Find the index of the last midpoint
    last_idx = len(midpoints) - 1

    # Determine the lower and upper bounds of the remaining range
    lower = midpoints[last_idx - 1] + 1 if last_idx > 0 else 0
    upper = midpoints[last_idx] - 1 if last_idx < len(midpoints) - 1 else 9

    # Find the midpoint of the remaining range and append it to the list
    midpoint = (lower + upper) // 2
    midpoints.append(midpoint)

print(midpoints)

相关问题