首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将num列表拆分为具有特定顺序的子列表。

将num列表拆分为具有特定顺序的子列表。
EN

Stack Overflow用户
提问于 2022-09-07 18:10:05
回答 2查看 84关注 0票数 1

我有一个从范围1到n的数字列表,我想把这些数字分成x个子列表,其中每个子列表包含的数字少于30个。子列表的数量是我所需要的最小数量,这取决于列表中的数字总数,因此,例如,如果我有68个子列表,那么至少需要3个子列表,至少在它们之间分配数字。我将如何分割它们,以便每个子列表在原始列表中有下一个数字,以获得如下输出

代码语言:javascript
运行
复制
a = []
for i in range(68):
   a.append(i)

#code

output:
[[1,6,7,12,13,18,19,24....][2,5,8,11,14,17,20,23....][3,4,9,10,15,16,21,22....]]

或者,如果我需要4个子列表,它就会像这样

代码语言:javascript
运行
复制
output:
[[1,8,9,16,17....][2,7,10,15,18][3,6,11,14,19][4,5,12,13,20,21....]]

编辑:这与Splitting a python list into 4 sub-lists that are as even as possible的问题不完全相同,因为我不希望迭代在完成循环后返回开始。我希望它能像这样从头开始循环

代码语言:javascript
运行
复制
[0,13,14,28,29,42,43,56,57]
[1,12,15,27,30,41,44,55,58]
[2,11,16,26,31,40,45,54,59]
[3,10,17,25,32,39,46,53,60]
[4,9,19,24,33,38,47,52,61]
[5,8,20,23,34,37,48,51,62]
[6,7,21,22,35,36,49,50,63,64]
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-09-07 18:47:13

假设你有

代码语言:javascript
运行
复制
N = 68 # Number of elements
M = 30 # Max list size

首先是分项清单的数目:

代码语言:javascript
运行
复制
count = math.ceil(N / M)

或者,没有ceil

代码语言:javascript
运行
复制
count = (N + M - 1) // M

放置range(N)每个元素的方式如下所示:

代码语言:javascript
运行
复制
0, 1, 2, ..., count - 1, count - 1, count - 2, ..., 1, 0, 0, 1, 2, ...

每个count元素,您都翻转顺序。这样您就可以翻转每个count元素:

代码语言:javascript
运行
复制
subs = [[] for _ in range(count)]
for i in range(N):
    index = i % count
    if (i // count) % 2:
        index = count - index - 1
    subs[index].append(i + 1)

您也可以用另一种方式来看待它:子列表中元素的模式是(最多是一些偏移量):

代码语言:javascript
运行
复制
1, 2 * count, 2 * count + 1, 4 * count, 4 * count + 1, 6 * count, ...

您可以将其表示为嵌套列表理解:

代码语言:javascript
运行
复制
subs = [[j + (count - i if (j // count) % 2 else i + 1) for j in range(0, N - i, count)] for i in range(count)]
票数 3
EN

Stack Overflow用户

发布于 2022-09-07 18:44:49

对于三个子列表,sublists = [[], [], []]

sublists2

  • Second

  • 首先将下三项放在子列表中,然后sublists1将下三项放在sublists2中,然后sublists1再列出

  • 第三次迭代切换顺序,

  • 继续翻转每三项的顺序,直到迭代完成

为了使它成为n个子列表的泛型:

  • sublists = [[] for _ in range(n)]
  • get n项并将它们放入子列表,.,sublistn-1,sublistn
  • 获取下一个n项,并将它们放入子列表n,sublistn-1,.,sublist
  • repeat
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73639908

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档