当前位置: 首页 > 面试题库 >

python中的稀疏分配列表

姬英武
2023-03-14
问题内容

我需要具有以下行为的列表

>>> l = SparseList()
>>> l
[]
>>> l[2] = "hello"
>>> l
[ None, None, "hello"]
>>> l[5]
None
>>> l[4] = 22
>>> l
[ None, None, "hello", None, 22]
>>> len(l)
5
>>> for i in l: print i
None
None
"hello"
None
22

尽管它可以通过字典“模拟”,但并不完全相同。numpy数组可以以这种方式运行,但是我不想为这样的事情导入整个numpy。在自己编写代码之前,请问标准库中是否存在类似的内容。


问题答案:

以下是传递给定示例的最少代码(进行必要的调整:您期望使用怪异的空格和引号,在没有print声明的情况下在提示符下显示“无”等):

class SparseList(list):
  def __setitem__(self, index, value):
    missing = index - len(self) + 1
    if missing > 0:
      self.extend([None] * missing)
    list.__setitem__(self, index, value)
  def __getitem__(self, index):
    try: return list.__getitem__(self, index)
    except IndexError: return None

__test__ = dict(allem='''
>>> l = SparseList()
>>> l
[]
>>> l[2] = "hello"
>>> l
[None, None, 'hello']
>>> print l[5]
None
>>> l[4] = 22
>>> l
[None, None, 'hello', None, 22]
>>> len(l)
5
>>> for i in l: print i
None
None
hello
None
22
''')
import doctest
doctest.testmod(verbose=1)

我想您会想要更多(支持负索引,切片等),但这是您所有示例的隐式指定。



 类似资料:
  • 问题内容: 我有一个很大的csv文件,其中列出了图中节点之间的连接。例: 0001,95784 0001,98743 0002,00082 0002,00091 因此,这意味着节点id 0001连接到节点95784和98743,依此类推。我需要将其读入numpy中的稀疏矩阵。我怎样才能做到这一点?我是python的新手,所以有关此的教程也将有所帮助。 问题答案: 使用scipy的lil_matri

  • 如何在python中找到包含负数的稀疏矩阵的sqrt?和对负数不起作用。我还尝试使用。但它也不起作用。

  • 我正在实现一个稀疏矩阵类,使用映射向量来存储数据(映射表示矩阵的一行,其中键是列的索引,值是该位置的maitrix的值)我已经编写了计算行列式的函数,但我不知道是否有一种方法可以计算这种节省的时间(因为矩阵是稀疏的,大多数值为零)在这里我的实现: 这是类接口 我计算行列式的方式是什么?假设运算符()以这种方式重载 提前感谢您的帮助

  • 这个例子展示了如何使用 scikit-learn 中的单词包方法,根据主题对文档进行分类。本例使用scipy.sparse中的矩阵来存储特征,并演示各种能够有效处理稀疏矩阵的分类器。 本例中使用的数据集是20条新闻组数据集。通过scikit-learn可以自动下载该数据集,并进行缓存。 下述条形图展示了各个不同分类器,其信息包括精度、训练时间(已归一化)和测试时间(已归一化)。 import lo

  • 请看示例代码(注意 data 的数组下标): -- http://www.kyne.com.au/~mark/software/lua-cjson.php -- version: 2.1 devel local json = require("cjson") local data = {1, 2} data[1000] = 99 -- ... do the other things ngx.

  • 如何将稀疏矩阵划分为最少数量的连接组件,这样每个组件在整个组件中都有一个公共行或列。我应该使用什么数据结构来在最短的时间内完成这个任务。我认为要做到这一点,我必须最大化每个组件中的元素数量,所以在输入时,我在每行和每列中存储了元素数量。我对列表进行排序,然后用max(min(行中的元素,列中的元素))进行行或列排序,即, 对于矩阵: 然后我将首先删除第1列,然后我将不得不更新剩余的数组,这将占用大