【发布时间】:2019-12-22 05:19:02
【问题描述】:
给定一个排序列表 [1,2,3,4,5,6,7,8] 和该列表的随机版本
a=[1,2,5,3,7,8,6,4]
我想找出每个元素从其相对于排序列表的位置移动了多少步(朝向索引 0 的步数为正数,远离索引 0 的步数为负数)并将这些步长值存储在不同的索引中列表。
对于给定的输入,预期的输出是:
b=[0,0,-1,-4,2,-1,2,2]
考虑值3(在排序列表中位于索引2),在混洗数组中它位于索引3,所以它采取了-1步,因此b[2] = -1。类似地,对于值8(在排序列表中位于索引 7 处),在混洗后的数组中,它位于索引 5 处,因此它采取了 +2 步,因此是 b[7] = 2。
这是我尝试过的:
b=[0,0,0,0,0,0,0,0]
a=[1,2,5,3,7,8,6,4]
for x in range(len(a)):
b[a[x]]=a[x]-(x+1)
我收到此代码的错误:
IndexError: 列表赋值索引超出范围
请帮助我理解这一点。为什么我不能将列表中的整数作为索引传递给另一个列表?
【问题讨论】:
-
您如何确定
b不是很直观。你能解释一下你的过程吗? -
@smac89,这里假设原始顺序是 [1,2,3,4,5,6,7,8] 并且在 a=[1,2,5,3,7, 8,6,4] 5 是第 3 位,所以它向前走了 2 步。 4 位于第 8 位,因此它移动了 -4 步。 1 和 2 保持相同的位置,所以 0,0.like 其他数字。 3 采取了-1 步。 6 采取了-1 步。 7 和 8 各走 2 步。
-
这就是您的示例令人困惑的原因,因为它表明 5 需要后退 1 步,但实际上它应该前进 2 步
-
@smac89 希望它现在清楚.. 你能帮忙吗?
-
a列表中的数字 8 不是b列表中的有效索引。索引从 0 开始,而不是 1,因此b中的第一个索引是 0,b中的最后一个索引是 7,而不是 8。
标签: python-3.x list data-structures