有没有办法将列表分成块?

我有一个非常大的列表(~1M项),想拆开它。

我发现无法解包大于8000项的列表,因此我想将其分成块。

基本上,这是Python中的函数

def chunks(lst, size):
    for i in range(0, len(lst), size):
         yield lst[i:i+size]

(参考资料,我正在使用eval在redis上运行lua脚本)

点赞
用户2858170
用户2858170

你可以编写一个迭代器,以给定大小的块为单位返回元素。

-- 一个会遍历 lst 的迭代器函数
function chunks(lst, size)
    -- 当前索引
    local i = 1
    -- 块计数器
    local count = 0
    return function()
        -- 如果已经到达 lst 的结尾,则终止迭代
        if i > #lst then return end
        -- 获取 lst 的一个片段
        local chunk = table.move(lst, i, i + size -1, 1, {})
        -- 下一个起始索引
        i = i + size
        count = count + 1
        return count, chunk
    end
end

-- 测试
local a = {1,2,3,4,5,6,7,8,9,10,11}
for i, chunk in chunks(a, 2) do
    print(string.format("#%d: %s", i, table.concat(chunk, ",")))
end

输出结果:

#1: 1,2
#2: 3,4
#3: 5,6
#4: 7,8
#5: 9,10
#6: 11

阅读资料:

https://www.lua.org/pil/7.1.html

https://www.lua.org/manual/5.4/manual.html#3.3.5

2021-03-23 12:29:59