首页 > 解决方案 > 什么是单一参考的有效容器?

问题描述

我有一个包含任意统一类型对象的列表:

items = ['a', 'b', 'c', 'x', 'y', 'z']

我正在浏览列表并通过根据一些不重要的条件将它们放置在容器中来标记对象。假设它是奇数指数:

for i in range(len(items)):
    if i % 2:
        items[i] = (items[i],)

第二遍将过滤列表以打开标记的项目并删除其他所有内容:

items = [x[0] for x in items if isinstance(x, tuple)]

这段代码基本上是功能性的。但是,对于非常大的数组,标记会增加内存使用量并且自然需要时间。

对于这样的事情,最有效的容器是什么?我使用元组是因为它在我查看的所有容器类中占用空间最小。有没有更好的方法来包装单个引用?

标签: pythonlist

解决方案


我建议使用布尔列表或元组进行标记。如果需要,您可以将其压缩为位图。

flag = [i%2 for i in range(len(items))]

在第二遍中提取所需的元素items

new_items = [x for x, wanted in zip(items, flag) if wanted]

这会让你前进吗?


推荐阅读