例如,如果我们的源列表是:
input = [1, 2, 3, 4, 5, 6, 7, 8, 9, ... ]
Run Code Online (Sandbox Code Playgroud)
我需要这样的东西:
output = {1:[1], 2:[2,3], 3:[4,5,6], 4:[7,8,9,...], ...}
Run Code Online (Sandbox Code Playgroud)
我尝试这样,但这不能正常工作:
groups = {}
N = 1
group = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
for i in range(0, len(group)-1):
groups.update({N:group[i:i+N]})
N+=1
Run Code Online (Sandbox Code Playgroud)
为了完整起见 - 您还可以编写一个适用于任何迭代的版本:
from itertools import islice, count
group = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
res = {k:v for k,v in enumerate(iter(lambda i=iter(group), c=count(1): list(islice(i, next(c))), []), 1)}
# {1: [1], 2: [2, 3], 3: [4, 5, 6], 4: [7, 8, 9, 10]}
Run Code Online (Sandbox Code Playgroud)
你的代码几乎是正确的,但逻辑是错误的。我添加了一个名为start
that 的变量,它是每个新组应开始的索引,并将循环更改为while
; 当start
大于或等于列表的长度时,我们已经处理了所有项目。
groups = {}
N = 1
group = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
start = 0
while start < len(group):
groups[N] = group[start:start + N]
start += N
N += 1
Run Code Online (Sandbox Code Playgroud)
输出
{1: [1], 2: [2, 3], 3: [4, 5, 6], 4: [7, 8, 9, 10]}
Run Code Online (Sandbox Code Playgroud)
另外,不需要使用更新,简单地分配给字典键就可以了。