如何实现以下功能:根据给定下标从列表或字符串中取出对应的元素?
代码示例如下:
# 问题:从alist中取出下标为3,5,6的元素,返回一个列表
alist = range(20)
idxs = [3,5,6]
alist[idxs] # 运行此句会报错,报错信息为 TypeError: range indices must be integers or slices, not list
方法1:使用np.array
将列表转化为ndarray结构,然后可以直接将多个下标(一个list)传入ndarray结构。
实现代码如下:
alist = range(20)
idxs = [3,5,6]
alist = np.array(alist)
print(alist[idxs]) # [3 5 6]
方法2:方法1固然很方便,但若alist是一个非常大的数据(如超过了1G),那么使用np.array(alist)时将会爆内存,爆内存信息为:
MemoryError: Unable to allocate 279. GiB for an array with shape (43698, 2) and data type <U858344
因此考虑写一个函数,可以根据下标从列表中取出对应的元素
实现代码如下:
def subset(alist, idxs):
sub_list = []
for idx in idxs:
sub_list.append(alist[idx])
return sub_list
# 从列表中取出子集
alist = range(20)
idxs = [3,5,6]
subset(alist, idxs) # [3, 5, 6]