futui 发表于 2023-4-16 13:00:49

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

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

lng = range(0,x)   #要取数的长度
gap = 31   #gap表示要在整个lng中取的个数(这里是31)
gap_list = []   #储存取的gap(31)个数,   #其中最开始或最后的数,必取,其它按间隔取29个数,如果不足,就全取。

总的说,lng只有31个数以内,就全取;
          大于31个数,就取['第一个数',..(中间取间隔大致相当的29个数)...,'最后一个数']

求大师帮忙,谢谢

歌者文明清理员 发表于 2023-4-16 13:03:09

本帖最后由 歌者文明清理员 于 2023-4-16 13:35 编辑

根据您的描述,你可以按照以下步骤取数:

[*]如果 x <= 31,那么直接取所有的数字。

[*]如果 x > 31,则需要从序列中选择 31 个数字。其中,最开始和最后的数字必须被选中。其余数字根据固定间隔选取。


具体实现代码可以如下所示:

# 第一步
if x <= gap:
    gap_list = list(lng)
   
# 第二步
else:
    gap_list.append(0)# 加入第一个数

    # 计算要选几个数,以及每个数之间的间隔
    num_of_gaps = gap - 2
    gap_size = (x - 1) // num_of_gaps

    # 按照间隔选取数值
    index = gap_size + 1
    while len(gap_list) < gap - 1:
      gap_list.append(lng)
      index += gap_size

    gap_list.append(x - 1)# 加入最后一个数
在这段代码中,我们使用了列表 gap_list 来保存选取的数值。一开始,我们将 0 添加到 gap_list 中(即第一个数),然后计算出剩余应该选取的数的数量并计算其间隔大小。然后,按照相应的间隔,从原始序列 lng 中选取数值并添加到 gap_list 中。最后,将 x-1 (即最后一个数)添加到 gap_list 中。

希望这可以帮助到您。

isdkz 发表于 2023-4-16 13:03:58

您好!这里给您提供一个Python函数,可以实现您所需要的功能:

def get_numbers(lng, gap):
    gap_list = []
    if len(lng) <= gap:
      gap_list = lng
    else:
      # 从第一个数到倒数第二个数,每隔step取一个数,共取gap-2个数
      step = (len(lng) - 1) // (gap - 1)
      for i in range(0, len(lng) - 1, step):
            gap_list.append(lng)
      # 添加最后一个数
      gap_list.append(lng[-1])
    return gap_list

x = 100
lng = range(0, x)
gap = 31
gap_list = get_numbers(lng, gap)
print(gap_list)

这段代码定义了一个get_numbers函数,它接收两个参数:lng是您要从中取数的数列,gap是您希望取得的数的个数。该函数首先检查lng中的元素个数是否小于等于gap,如果是,则直接返回lng;否则,计算间隔step,并从第一个数开始,每隔step取一个数,直到倒数第二个数。最后,将最后一个数添加到列表中。

在示例代码中,我们设置x为100,lng为从0到99的整数序列,gap为31。调用get_numbers函数后,我们将得到一个包含31个元素的列表,其中第一个和最后一个元素分别是0和99,中间还有29个元素,它们在原序列中的间隔尽量相等。

futui 发表于 2023-4-16 15:28:39

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

我在大师的基础上,作如下改进:但程序还是不能运行。
我的大致思路是:
取整作为步长
取余,每次把它取1,加到对应索引里去,直到余数为0

请大师帮我修改下,谢谢

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 = 0

      while gap_list[-1] <= lng:
            index += 1
            if gap_y > 0:    #每次把它取1,直到把余用尽
                gap_y_z = 1
                gap_y = gap_y - 1

            gap_list.append(gap_z*index+gap_y_z)            

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

lng = 94
gap = 31
gap_list = get_numbersw(lng, gap)
print(gap_list)

futui 发表于 2023-4-16 15:44:26

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

能运行了,但不知道什么原因,反正要多几个数,不是31(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)            

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


lng = 94
gap = 31
gap_list = get_numbersw(lng, gap)
print(gap_list)
页: [1]
查看完整版本: 关于在一系列数中取几个数的问题,求帮忙,谢谢