Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从一个范围中获取n个数字,包括x_Python - Fatal编程技术网

Python 从一个范围中获取n个数字,包括x

Python 从一个范围中获取n个数字,包括x,python,Python,我正在用python创建分页系统。我有一个给定范围的页面[1,…n],并希望从中精确提取m个数字,包括当前的页码。如果可能,当前页码必须位于中间。有什么优雅的方法可以做到这一点吗 我知道可以使用很少的if…else语句来完成,但这似乎非常笨拙 def生成短页面范围(当前页面、页面范围、显示页面编号): 单面页数=int((显示页数-1)/2) 短页面范围=范围(当前页面-单侧页面,当前页面+单侧页面+1) #创建页面范围的公共部分 short_page_range=[如果项目在page_rang

我正在用python创建分页系统。我有一个给定范围的页面[1,…n],并希望从中精确提取m个数字,包括当前的页码。如果可能,当前页码必须位于中间。有什么优雅的方法可以做到这一点吗

我知道可以使用很少的if…else语句来完成,但这似乎非常笨拙

def生成短页面范围(当前页面、页面范围、显示页面编号):
单面页数=int((显示页数-1)/2)
短页面范围=范围(当前页面-单侧页面,当前页面+单侧页面+1)
#创建页面范围的公共部分
short_page_range=[如果项目在page_range中,则项目在short_page_range中]
返回短页面范围
对于数据:当前页面=1,页面范围大小>=7,显示页面=7,我想返回[1,2,3,4,5,6,7],现在它返回[1,2,3,4]

编辑:
假设我有一个20页的列表,它给我们的页面范围如下:[1,2,…19,20]。我想将分页器的大小限制为5页,因此当我们在第12页时,它会显示[10,11,12,13,14]。但我也希望它总是能精确地显示5页,所以当当前页面左侧只有一页时,我希望它在右侧显示另外一页。因此,当我们在第2页时,我想返回[1,2,3,4,5],而不是从当前函数中得到的[1,2,3,4]。与第一页相同,我希望返回[1,2,3,4,5],而不是[1,2,3]

我的解决方案也使用if-else,我认为这是最直接的方法:

def generate_short_page_range(current_page, page_range, shown_pages_number):

    page_per_side = shown_pages_number // 2
    current_page_index = page_range.index(current_page)

    # First, check if the current_page is at the edges
    if current_page in page_range[page_per_side:-page_per_side]:
        return page_range[current_page_index - page_per_side : current_page_index + page_per_side + shown_pages_number%2]

    # If it is at the front, return the firstfew pages (len = shown_pages_number)
    elif current_page_index < len(page_range) // 2:
        return page_range[:shown_pages_number]

    # If it is at the end, return the last few pages (len = shown_pages_number)
    else:
        return page_range[-shown_pages_number:]
输出:

Page 22:
[22, 23, 24, 25, 26]
Page 23:
[22, 23, 24, 25, 26]
Page 24:
[22, 23, 24, 25, 26]
Page 25:
[23, 24, 25, 26, 27]
Page 26:
[24, 25, 26, 27, 28]
Page 27:
[25, 26, 27, 28, 29]
Page 28:
[25, 26, 27, 28, 29]
Page 29:
[25, 26, 27, 28, 29]


你所说的
页面范围>=7
是什么意思?如果您能给出一些输入结构和预期输出结构的示例,那就太好了,因为目前的描述对我来说有点模糊,我不知道传递给函数的参数是什么,以获得您提到的输出
[1,2,3,4]
Page 22:
[22, 23, 24, 25, 26]
Page 23:
[22, 23, 24, 25, 26]
Page 24:
[22, 23, 24, 25, 26]
Page 25:
[23, 24, 25, 26, 27]
Page 26:
[24, 25, 26, 27, 28]
Page 27:
[25, 26, 27, 28, 29]
Page 28:
[25, 26, 27, 28, 29]
Page 29:
[25, 26, 27, 28, 29]