鱼C论坛

 找回密码
 立即注册
查看: 1933|回复: 6

[已解决]新人求助关于list索引问题

[复制链接]
发表于 2021-10-22 09:11:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 wlp1818100227 于 2021-10-22 09:12 编辑

刚刚从Matlab转Python的萌新,问题如下
a = [1,2,3];
b = [2001,2002,2003];
想通过a把b的值索引出来导入新矩阵中
MATLAB代码如下
i = 1:3
n = b(a(i))
结果
n = [2001,2002,2003]

想用python除了for 循环还有其他办法吗
最佳答案
2021-10-22 09:18:22
  1. n = [b[i - 1] for i in a]
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-10-22 09:18:13 | 显示全部楼层

回帖奖励 +15 鱼币

切片就可以了
从0开始,区间前闭后开
  1. b = [2001,2002,2003]
  2. print(b[0])
  3. print(b[1])
  4. print(b[2])
  5. print(b[0:2])
  6. print(b[0:3])
  7. print(b[1:3])
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-22 09:18:22 | 显示全部楼层    本楼为最佳答案   
  1. n = [b[i - 1] for i in a]
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2021-10-22 09:23:28 | 显示全部楼层
逃兵 发表于 2021-10-22 09:18
切片就可以了
从0开始,区间前闭后开

谢谢啦,看来还是python可能还是for循环简单一点
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-22 09:25:49 | 显示全部楼层

用for 好简洁,用MATLAB一直不太喜欢用for
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-22 09:26:52 | 显示全部楼层
如果按index逐个取的话,python确实需要for循环,或者借助for的列表推导式。
  1. >>> a
  2. [1, 2, 3]
  3. >>> b
  4. [2001, 2002, 2003]
  5. >>> [b[a[i] - 1] for i in range(3)]
  6. [2001, 2002, 2003]
  7. >>>
复制代码

单如果是连续取的话,用切片是比较方便的:
  1. >>> b = [1,2,3,4,5]
  2. >>> b[1:4]
  3. [2, 3, 4]
  4. >>>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-22 09:33:55 | 显示全部楼层
本帖最后由 hrpzcf 于 2021-10-22 09:35 编辑
wlp1818100227 发表于 2021-10-22 09:25
用for 好简洁,用MATLAB一直不太喜欢用for


在python中一般不用把索引和值分开储存这种写法
上一级处理出来的索引值直接用于列表取值就可以了,甚至可以把处理索引和取值写在一个语句内,索引值单独储存相当于多了个中间环节
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-14 16:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表