futui 发表于 2023-4-16 16:07:58

再问关于在一系列数中取几个数的问题,求帮忙,谢谢

关于在一系列数中取几个数的问题,求帮忙,谢谢

在范围0到lng(lng表示为最大数字)之间,取gap个数
gap的第一个和最后一个是必取,也就是必取0和lng2个,其它数为:gap-2

我的代码如下,但每次取的个数,总是大于gap,不知道什么原因,求大师帮忙,谢谢


defget_numbersw(lng, gap):
    gap_list = []
    if lng <= gap:
      gap_list = list(lng)
    else:
      gap_z = lng // gap
      gap_y = lng % gap

      index = 0
      gap_list.append(0)

      while gap_list[-1] < lng:
            index += 1
            if gap_y != 0:
                gap_y_z = 1
                gap_y = gap_y - 1
            gap_list.append(gap_z*index+gap_y_z)            

      #gap_list.append(lng - 1)# 加入最后一个数
    print(index)
    return gap_list


lng = 100   #指在0-100中间取数
gap = 31    #31是指取个数
gap_list = get_numbersw(lng, gap)
print(gap_list)

sfqxx 发表于 2023-4-16 16:10:18

本帖最后由 sfqxx 于 2023-4-16 16:15 编辑

你好!根据你提供的代码,我看到了几个潜在的问题。首先是计算 `gap_z` 和 `gap_y` 的公式似乎有点错误,应该是:


gap_z = (gap - 2) // (lng - 2)
gap_y = (gap - 2) % (lng - 2)

这样计算出来的 `gap_z` 表示至少每隔多少个数取一个数,`gap_y` 表示剩余需要再取多少个数。如果 `gap_y` 不为零,则前 `gap_y` 个间隔要多取1个数。

另外,在循环中计算 `gap_y_z` 的语句没有放在条件语句里面,应该写成:


if gap_y != 0:
    gap_y_z = 1
    gap_y = gap_y - 1
else:
    gap_y_z = 0


最后,在生成 `gap_list` 列表时,如果直接把 `lng` 添加进去会导致 `gap_list` 中多出一个不必要的元素,所以可以把最后一个元素删掉,然后再添加上 `lng` 就行了。

下面是修改后的代码,你可以试试看是否符合你的需求:


def get_numbersw(lng, gap):
    gap_list = []
    if lng <= gap:
      gap_list = list(range(lng))
    else:
      gap_z = (gap - 2) // (lng - 2)
      gap_y = (gap - 2) % (lng - 2)

      gap_list.append(0)
      index = 1
      while gap_list[-1] < lng-1:
            if gap_y != 0:
                gap_y_z = 1
                gap_y = gap_y - 1
            else:
                gap_y_z = 0
            gap_list.append(gap_z*index+gap_y_z)
            index += 1

      gap_list.pop() # 删除最后一个元素
      gap_list.append(lng-1) # 添加lng
    return gap_list


lng = 100   #指在0-100中间取数
gap = 31    #31是指取个数
gap_list = get_numbersw(lng, gap)
print(gap_list)

有用请设置最佳答案

isdkz 发表于 2023-4-16 16:17:03

你好!我看了你的代码,发现了一些问题。我对代码进行了修改,现在应该可以正常工作了:

def get_numbersw(lng, gap):
    gap_list = []
    if lng <= gap:
      gap_list = list(range(lng))
    else:
      gap_z = (lng - 1) // (gap - 1)# 修改这里,使得每个间隔更加平均分布
      gap_y = (lng - 1) % (gap - 1)

      index = 0
      gap_y_z = 0# 将gap_y_z初始化在循环外部

      while len(gap_list) < gap:# 修改这里,使得循环终止条件更合理
            if gap_y != 0:
                gap_y_z = 1
                gap_y = gap_y - 1
            else:
                gap_y_z = 0# 添加这里,确保在不需要额外增加间隔时,gap_y_z为0
            gap_list.append(gap_z * index + gap_y_z)
            index += 1

    return gap_list


lng = 100# 指在0-100中间取数
gap = 31# 31是指取个数
gap_list = get_numbersw(lng, gap)
print(gap_list)


这个修改后的代码应该可以按照你的需求在0到lng之间取gap个数,其中首尾两个数必取(即0和lng)。希望这对你有所帮助!

futui 发表于 2023-4-16 17:27:21


def get_numberslw(lng, gap):
    gap_list = []
    if lng <= gap:
      gap_list = list(range(lng))
    else:
      gap_z = (lng - 1) // (gap - 1)# 修改这里,使得每个间隔更加平均分布
      gap_y = (lng - 1) % (gap - 1)

      gap_list.append(0)
      index = 1
      gap_y_z = 0# 将gap_y_z初始化在循环外部      

      while gap_list[-1] < lng-1:# 修改这里,使得循环终止条件更合理
            if gap_y > 0:
                gap_y_z = gap_y_z + 1   #***
                gap_y = gap_y - 1
            gap_list.append(gap_z* index+ gap_y_z)
            index += 1
            
    print(index)
    return gap_list

lng = 62   #指在0-100中间取数
gap = 31    #31是指取个数
gap_list = get_numberslw(lng, gap)
print(gap_list)

lizr 发表于 2023-4-16 22:27:13

{:5_106:}
页: [1]
查看完整版本: 再问关于在一系列数中取几个数的问题,求帮忙,谢谢