美文网首页
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