我有大量的数值数据,我需要按排序顺序前后排序,插入和移动值。我以前使用的是一个简单的数组。现在每个值都必须与一个id(一个唯一的int,只是为了骑行)链接。
我可以扩展数组类,还是需要使用元组列表?什么是我最好的选择?
答案 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)