随着子列表大小的增加,如何将列表转换为嵌套列表?
例如, 来自
[1, 2, 3, 4, 5, 6]
到
[[1], [2, 3], [4, 5, 6]]
答案 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)
答案 3 :(得分:0)
假设列表长度具有最后一个块的正确长度以具有正确的大小,则可以使用列表unauthorized_client
,from 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