切片列表以提取给定索引的最后 k 个和下 k 个元素

Slicing a list to extract the last k and next k elements given an index

我正在尝试编写一段智能代码来执行以下操作:

给定一个列表和一个整数值参数k:

k = 2 
myList = [1, 2, 3, 4, 5]

我想找到一种方法来分割我的列表,以便我以后可以构建以下字典:

{1: [5, 4, 2, 3], 
 2: [1, 5, 3, 4],
 3: [2, 1, 4, 5],
 4: [3, 2, 5, 1],
 5: [4, 3, 1, 2]}

即,我需要对列表进行切片并提取最后一个 k 和下一个 k 元素(切片后列表中元素的顺序无关紧要),给定一个索引。 例如,如果我的索引是 0,那么我会期望 [5, 4, 2, 3].

我的问题类似于this question。但是不完全一样。

如有任何帮助、提示或对任何来源的引用,我将不胜感激。

你可以这样做:

k = 2
myList = [1, 2, 3, 4, 5]

offset = len(myList)
padded_list = myList * 3

result = {myList[i]: padded_list[j - k: j][::-1] + padded_list[j + 1: j + k + 1] for i, j in
          zip(range(offset), range(offset, 2 * offset))}
print(result)

输出

{1: [5, 4, 2, 3], 2: [1, 5, 3, 4], 3: [2, 1, 4, 5], 4: [3, 2, 5, 1], 5: [4, 3, 1, 2]}

想法是在列表前后填充列表本身,并在中间部分进行迭代。在 k < len(myList).

时这应该没有问题

我认为简单的 python 列表切片就足够了。基本上我将列表切片两次并将结果两个列表连接起来。

>>> l = [1, 2, 3, 4, 5]
>>> k = 2
>>> l[:k-1] + l[k:]
[1, 3, 4, 5]

祝你好运!