Python:将元组转为数组

Python: turn tuples into array

目前,我有一个如下所示的元组列表:

[(0, 0.13), (323, 0.72), (812, 0.35), ..., (2127, 0.44)]

元组按第一个元素排序:0 -> 323 -> 812 -> ...

我想把这个元组列表变成一个数组(或稀疏矩阵),每个元组的第一个元素是第二个元素的数组索引:

[0.13, 0, ..., 0, 0.72, 0, ...,  0, 0.35, 0, ...]

并用0填充这个数组的末尾,以将其扩展到一定长度。

任何人都可以在 python 中提供上述功能的快速实现吗?

我目前使用字典来完成这个过程,对于大数组来说速度很慢。

谢谢。

我认为这会满足您的要求:

results = []
for k,i in list_of_tuples:
  while k > len(results):
     results.append(0)
  results.append(i)

这是一个示例 运行,给定输入 [(0, 12), (5, 43), (10, 1)],结果是:

>>> i = []
>>> for k,v in t:
...    while k > len(i):
...       i.append(0)
...    i.append(v)
...
>>> i
[12, 0, 0, 0, 0, 43, 0, 0, 0, 0, 1]

您可以预先分配一个零数组,然后填写提供的数字:

def expand_sparse_array(inp):
    length = (inp[-1][0]+1) # index of last element + 1
    out = [0]*length

    for (idx, val) in inp:
        out[idx] = val

    return out

例如:

>>> expand_sparse_array([(0, 0.13), (3, 0.72), (5, 0.35), (10, 0.44)])
[0.13, 0, 0, 0.72, 0, 0.35, 0, 0, 0, 0, 0.44]