切片列表以提取给定索引的最后 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]
祝你好运!
我正在尝试编写一段智能代码来执行以下操作:
给定一个列表和一个整数值参数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]
祝你好运!