顺序字符串分块

时间:2018-09-11 15:31:33

标签: python list list-comprehension text-mining nested-lists

我有一个字符串列表,我希望将其分块为包括三个元素的子列表:列表中的元素(i),前一个元素(i-1)和下一个元素(i + 1) 。我还希望遍历列表中的其他所有元素,而不是每个元素。更具体地说,我该如何去做...

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

为此...(从索引位置1开始以启用前一个元素);

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

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

2 个答案:

答案 0 :(得分:2)

您可以对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])))

答案 1 :(得分:1)

如果您想要一个没有列表理解和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循环。