python - Python:创建可索引对象而不在每个索引处创建每个元素的最佳方法
问题描述
假设您有一个列表,但它要么太大(或笨重)而无法实际计算和存储列表的每个元素。假设您可以根据需要根据索引或其他规则计算元素。最好的方法是什么?
以下是执行此操作的一种方法,但还有其他方法吗?有没有标准的方法来做到这一点?
import bisect
class Squares:
def __init__(self, len):
self.len = len
def __len__(self):
return self.len
def __getitem__(self, i):
return i ** 2
target = 20
squares = Squares(10)
i = bisect.bisect_left(squares, target) # Finds the index of the smallest square >= target
print(squares[i]) # 25, the smallest square >= 20
在这种特殊情况下的好处是我们不需要计算和存储 10 个正方形的列表;我们只是根据需要计算一些平方。10 个方格的计算和存储并不多,但一般来说,计算每个元素所涉及的元素数量或复杂性可能令人望而却步。
解决方案
推荐阅读
- docker - Spotify docker 客户端:如何获取已启动容器的标准输出和标准错误?
- ios - Swift本地化StringWithFormat数字输出而不是Text
- html - 如何在 css hack/媒体查询中扩展 Internet Explorer?
- r - 如何使用 Sjplot 更改 facet_grid 和点估计的形状?
- python - 安装后没有 Anaconda Navigator (Windows 10)
- docker - VSCode 远程容器 - 未使用 docker-compose 在开发容器上安装扩展
- pipenv - 使用多个 Pipfile 支持 python2 & python3
- html - 如何从 django 模板中获取视图中的外键?
- php - 通过标签名称获取 xml 元素
- javascript - 将参数传递给生成器函数