我有一个字符串列表,我希望将其分块为包括三个元素的子列表:列表中的元素(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>在原始列表中。
答案 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']]
或者将list
与zip
直接用于元组列表:
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循环。