Python - 使用哪种数据结构?

时间:2011-11-01 01:31:40

标签: python arrays

我有大量的数值数据,我需要按排序顺序前后排序,插入和移动值。我以前使用的是一个简单的数组。现在每个值都必须与一个id(一个唯一的int,只是为了骑行)链接。

我可以扩展数组类,还是需要使用元组列表?什么是我最好的选择?

4 个答案:

答案 0 :(得分:3)

你可以使用一个列表,以便有一个排序好的列表。如果要关联其他数据,可以使用元组来存储数据,甚至可以为其创建一个自定义对象,以便将id存储在附加字段中。

您不需要为此扩展列表,您可以将任何对象放入列表中。例如,这很容易实现:

>>> lst = [ ( 132, 'foobar' ), ( 58, 'other value' ) ]
>>> lst.append( ( 70, 'some data value' ) )
>>> lst
[(132, 'foobar'), (58, 'other value'), (70, 'some data value')]
>>> lst.sort( key=lambda x: x[0] )
>>> lst
[(58, 'other value'), (70, 'some data value'), (132, 'foobar')]
>>> lst.sort( key=lambda x: x[1] )
>>> lst
[(132, 'foobar'), (58, 'other value'), (70, 'some data value')]

编辑:

如果您使用的是Python 3.1+,您还可以使用collections.OrderedDict类型。它是普通dict的扩展,它维护顺序就像list一样。

答案 1 :(得分:2)

当您需要进行插入或删除时,使用列表或数组是有问题的 - 这些是O(n)操作,对于大型数据集来说这可能会非常慢。

考虑使用blist,它具有类似列表的API但提供O(lg N)插入和删除。

答案 2 :(得分:1)

为什么不使用字典,将密钥作为原始数组的项目,value是与密钥相关的id。

当然你可以按排序顺序访问它,如下所示:

a = {'key':'id'}

keys = a.keys()

keys.sort()

for k in keys:

    print a[key]

答案 3 :(得分:1)

与poke的答案类似,你可以使用2d数组 - 但如果数组很大,NumPy通常是Python中任何数值数据的好选择。只需制作一个看起来像

的2D数组
[ [1  614.124]
  [2  621236.139]
  [3  1243.612] ]

然后您可以使用.sort()进行排序。