Python:使用索引列表对列表进行高效切片

10
我希望知道一种高效的方法和代码来切分一个包含数千个元素的列表的方式,并且希望能够节省代码量。
示例:
b = ["a","b","c","d","e","f","g","h"] 
index = [1,3,6,7] 

我希望得到如下的结果:

c = ["b","d","g","h"] 

几乎相同的问题,但有更多的解决方案:Python带任意索引的列表切片 - pabouk - Ukraine stay strong
1个回答

17

使用列表推导式是最直接的处理列表的方法:

c = [b[i] for i in index]

但是,根据您的数据实际情况和其他需要完成的任务,您可以使用numpy数组 - 在这种情况下:

c = b[index]

使用numpy数组来进行切片操作可以达到你想要的效果,并且避免了大型切片操作可能带来的内存开销 - numpy数组比列表存储更有效率,而且切片只是对数组的视图操作,而不是部分复制。


我有这个错误信息c = b[index] Traceback (most recent call last): File "<interactive input>", line 1, in <module> TypeError: 列表索引必须是整数,而不是列表 - Gianni Spear
1
@Gianni,正如我在答案中所说的那样,如果您使用numpy数组而不是列表,那么它将起作用。它们可以采用各种有趣的索引;列表只能采用整数(以及带有整数参数的切片)。 - lvc
1
使用列表推导式加1。这是教新手的好方法。 - Roland Smith

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接