顺序字符串分块
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']]
或直接将 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])))
如果您想要一个没有列表理解和 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 循环。
我有一个字符串列表,我希望将其分成包含三个元素的子列表,列表中的元素 (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']]
或直接将 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])))
如果您想要一个没有列表理解和 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 循环。