python-3.x - 如何将列表中的元素作为索引传递给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:列表分配索引超出范围
请帮助我理解这一点。为什么我不能将列表中的整数作为索引传递给另一个列表?
解决方案
您可以通过将数组位置的预期值与数组中该值的索引进行简单比较来获得所需的结果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]
推荐阅读
- android - 如何在不使用 android:sharedUserId="android.uid.system" 的情况下制作特权系统应用程序?
- c# - 在 C# 中使用 ChromeDriver 时如何设置域引用标头?
- ios - 新版本 有应用内购买无法与此版本一起提交
- postgresql - DBeaver 中连接到 PostgreSQL 数据库的待处理事务(自动提交设置为关闭,我从 sqleditor 工作表启动 COMMIT 命令)
- python-3.x - 使用Python重命名excel中的列名
- huawei-mobile-services - 尝试集成Huawei AppGallery APM SDK报错“miss client id”
- c++ - 是否有可能改变未来的类型?
- scikit-learn - 为 csv 格式的数据添加标签以进行机器学习
- flutter - 任务应用程序的 Flutter 执行失败:externalNativeBuildDebug 异常 | 扑
- reactjs - React Hook 表单中的动态输入元素