首页 > 解决方案 > 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 个方格的计算和存储并不多,但一般来说,计算每个元素所涉及的元素数量或复杂性可能令人望而却步。

标签: pythonarrayslist

解决方案


推荐阅读