顺序字符串分块

Sequential string chunking

我有一个字符串列表,我希望将其分成包含三个元素的子列表,列表中的元素 (i)、前面的元素 (i-1) 和下一个元素 (i+ 1).我还希望遍历列表中的 每个其他 元素而不是每个元素。更具体地说,我怎样才能从这里开始......

mylist = ['red','green','blue','yellow','orange','purple','black']

为此...(从索引位置 1 开始启用前面的元素);

mysublists = [['green','red','blue'],['yellow','blue','orange'],['purple','orange','black']]

因此子列表中的每个项目都包含每个第二个元素作为其第一个项目,然后是原始列表中之前它的项目,然后是之前的项目 成功它在原始列表中。

您可以将列表理解与 zip 和列表切片结合使用:

res = [[j, i, k] for i, j, k in zip(mylist[::2], mylist[1::2], mylist[2::2])]

[['green', 'red', 'blue'],
 ['yellow', 'blue', 'orange'],
 ['purple', 'orange', 'black']]

或直接将 listzip 一起用于元组列表:

res = list(zip(mylist[1::2], mylist[::2], mylist[2::2]))

如果你想要一个语法相似的列表列表,你可以使用map:

res = list(map(list, zip(mylist[1::2], mylist[::2], mylist[2::2])))

如果您想要一个没有列表理解和 zip 的解决方案,您可以执行以下操作:

def chunk_list(list_to_chunk):
    buffer_list = []
    for index in range(1, len(list_to_chunk) - 1):
        new_list = [list_to_chunk[index], \
                    list_to_chunk[index-1], list_to_chunk[index+1]]

        buffer_list.append(new_list)

    return buffer_list

该代码对从 1 到倒数第二个索引 (range) 的每个索引使用 for 循环。