鱼C论坛

 找回密码
 立即注册
查看: 2272|回复: 4

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

[复制链接]
发表于 2023-4-16 13:00:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

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

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

求大师帮忙,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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])
        index += gap_size

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

希望这可以帮助到您。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[i])
        # 添加最后一个数
        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个元素,它们在原序列中的间隔尽量相等。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-16 15:28:39 | 显示全部楼层
本帖最后由 futui 于 2023-4-16 15:38 编辑

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

请大师帮我修改下,谢谢

def  get_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[index] = 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)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-16 15:44:26 | 显示全部楼层
本帖最后由 futui 于 2023-4-16 15:53 编辑

能运行了,但不知道什么原因,反正要多几个数,不是31(gap)个数,请大师看看,谢谢

def  get_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)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-14 20:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表