首页 > 解决方案 > 如何将列表中的元素作为索引传递给python中的列表?

问题描述

给定一个排序列表[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:列表分配索引超出范围

请帮助我理解这一点。为什么我不能将列表中的整数作为索引传递给另一个列表?

标签: python-3.xlistdata-structures

解决方案


您可以通过将数组位置的预期值与数组中该值的索引进行简单比较来获得所需的结果a。通过迭代 中的元素数量a,我们可以生成输出数组:

a = [1,2,5,3,7,8,6,4]
b = []
for x in range(len(a)):
    b.append(x - a.index(x+1))
print(b)

输出

[0, 0, -1, -4, 2, -1, 2, 2]

rextester 上的演示


推荐阅读