将列表转换成大小增加的块

时间:2018-11-18 19:41:26

标签: python list

随着子列表大小的增加,如何将列表转换为嵌套列表?

例如, 来自

[1, 2, 3, 4, 5, 6]

[[1], [2, 3], [4, 5, 6]]

4 个答案:

答案 0 :(得分:2)

我将使用islices在原始列表的迭代器上进行此操作。这样,我可以指定要采用的元素数量,而不必担心我目前处于哪个位置。 (此外,以下代码适用于任何迭代。)

def increasing_chunks(iterable):
    it = iter(iterable)
    i = 1

    while True:
        chunk = list(islice(it, i))
        if not chunk:
            break
        yield chunk
        i += 1

最后一个块可能会被截断为迭代器剩下的任意数量的元素。

演示:

>>> list(increasing_chunks([1, 2, 3, 4, 5, 6]))
[[1], [2, 3], [4, 5, 6]]
>>> list(increasing_chunks([1, 2, 3, 4, 5, 6, 7, 8]))
[[1], [2, 3], [4, 5, 6], [7, 8]]

如果要丢弃截断的块,请按如下所示调整代码:

def increasing_chunks_strict(iterable):
    it = iter(iterable)
    i = 1

    while True:
        chunk = list(islice(it, i))
        if len(chunk) < i:
            break
        yield chunk
        i += 1

现在,结果中不包括截断的块。

>>> list(increasing_chunks_strict([1, 2, 3, 4, 5, 6]))
[[1], [2, 3], [4, 5, 6]]
>>> list(increasing_chunks_strict([1, 2, 3, 4, 5, 6, 7, 8]))
[[1], [2, 3], [4, 5, 6]]

答案 1 :(得分:1)

作为对timgeb's solution(没有itertools)的跟踪,您需要跟踪索引:

l = [1, 2, 3, 4, 5, 6]

i, slice_length = 0, 1
result = []
while i < len(l):
    result.append(l[i:i + slice_length])
    i += slice_length
    slice_length += 1

print(result)
# [[1], [2, 3], [4, 5, 6]]

答案 2 :(得分:0)

几个itertoolsenumerate来进行救援:

$BASHPID

答案 3 :(得分:0)

假设列表长度具有最后一个块的正确长度以具有正确的大小,则可以使用列表unauthorized_clientfrom PIL import ImageTk,Image, ImageFont, ImageDraw import tkinter import textwrap from tkinter import Frame, Canvas, Text, INSERT, END root = tkinter.Tk() root.geometry("296x337") root.resizable(False, False) img = ImageTk.PhotoImage(Image.open("red.jpg")) panel = tkinter.Label(root, image=img) panel.pack(side="bottom", fill="both", expand="yes") def changepic(imagename): img2 = ImageTk.PhotoImage(Image.open(imagename)) panel.configure(image=img2) panel.image = img2 a2=tkinter.Button(root,text='change color',bd=0, command=changepic("blue.jpg") a2.config(highlightbackground='black') a2.place(x=135, y=70) list comprehension在几行中解决您的问题:

sum