将数组拆分为多个部分以进行分页

问题描述

假设我有一个数组:

["Ford","BMW","Audi","Tesla","Bentley","Chevrolet","Lexus","Mazda","Maserati","Mini"]

然后,如果我想每页打印3个元素(在终端中),我希望得到以下输出

"Ford","Audi" (First page) 
"Tesla","Bentley" (Second Page)
"Chevrolet","Mazda" (Third page)

我正在考虑切片,但是我不知道该怎么做。每页的元素数取决于用户输入,对于每个“ x”元素,页面数将加1。我在终端中打印输出

解决方法

您可以使用for循环和range(len())

分割数据
data = ["Ford","BMW","Audi","Tesla","Bentley","Chevrolet","Lexus","Mazda","Maserati","Mini"]

page_size = 3

pages_data = []

for i in range(0,len(data),page_size): 
    pages_data.append(data[i:i+page_size])

print(pages_data)

结果:

[ ['Ford','BMW','Audi'],['Tesla','Bentley'],['Chevrolet','Lexus','Mazda'],['Maserati','Mini'] ]

现在您可以将其用作pages_data[page]


您也可以使用while来执行此操作,但这会破坏原始列表

data = ["Ford","Mini"]

page_size = 3

pages_data = []

while data:
    pages_data.append(data[:page_size])
    data = data[page_size:]

print(pages_data)

结果相同:

[ ['Ford','Mini'] ]

两者都可以做

print('total pages:',len(pages_data))

for number,data in enumerate(pages_data,1):
    print(number,"|",",".join(item))

结果:

total pages: 4

1 | Ford,BMW,Audi 
2 | Tesla,Bentley
3 | Chevrolet,Lexus,Mazda 
4 | Maserati,Mini 
,

如果您使用的是Linux,则应该可以使用stty -a查看有关您的终端的信息。在其中的某个地方,您应该看到有多少行。获得此数字后,您可以在脚本中打印的每个rows - n元素之后打印n换行符。只要确保您之后没有调整终端的大小即可。如果需要,还可以使用os library(或类似方法)查询行并自动调整要在脚本中打印的换行符的数量。