美文网首页
Python:对列表或者字符串取子集

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

作者: 水木的编程那些事儿 | 来源:发表于2020-08-27 21:09 被阅读0次

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

    代码示例如下:

    # 问题:从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]
    

    相关文章

      网友评论

          本文标题:Python:对列表或者字符串取子集

          本文链接:https://www.haomeiwen.com/subject/dfphsktx.html