Python:对列表或者字符串取子集

如何实现以下功能:根据给定下标从列表或字符串中取出对应的元素?

代码示例如下:

# 问题:从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]
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值