鱼C论坛

 找回密码
 立即注册
查看: 1652|回复: 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
n = [b[i - 1] for i in a]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

回帖奖励 +15 鱼币

切片就可以了
从0开始,区间前闭后开
b = [2001,2002,2003]
print(b[0])
print(b[1])
print(b[2])
print(b[0:2])
print(b[0:3])
print(b[1:3])
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-22 09:18:22 | 显示全部楼层    本楼为最佳答案   
n = [b[i - 1] for i in a]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

谢谢啦,看来还是python可能还是for循环简单一点
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

用for 好简洁,用MATLAB一直不太喜欢用for
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-22 09:26:52 | 显示全部楼层
如果按index逐个取的话,python确实需要for循环,或者借助for的列表推导式。
>>> a
[1, 2, 3]
>>> b
[2001, 2002, 2003]
>>> [b[a[i] - 1] for i in range(3)]
[2001, 2002, 2003]
>>> 
单如果是连续取的话,用切片是比较方便的:
>>> b = [1,2,3,4,5]
>>> b[1:4]
[2, 3, 4]
>>> 
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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


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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-12 23:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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