【发布时间】:2016-10-07 16:07:09
【问题描述】:
我正在寻找在 Python 2.x 中执行此任务的最佳方式
我有一个给定大小的数组,其中一些元素必须保持在由属性标识的给定位置。
我必须从数组中删除一个元素,并将所有非固定元素移动到顶部,并用第一个条目的副本填充缺少的底部条目。
例子
起始数组:
array[0]={property='dynamic', name='A'}
array[1]={property='dynamic', name='B'}
array[2]={property='fixed', name='C'}
array[3]={property='dynamic', name='D'}
array[4]={property='fixed', name='E'}
array[5]={property='dynamic', name='F'}
删除一项
array[0]={property='dynamic', name='A'}
array[1]={property='dynamic', name='B'}
array[2]={property='fixed', name='C'}
array[4]={property='fixed', name='E'}
array[5]={property='dynamic', name='F'}
将非固定元素移到顶部
array[0]={property='dynamic', name='A'}
array[1]={property='dynamic', name='B'}
array[2]={property='fixed', name='C'}
array[3]={property='dynamic', name='F'}
array[4]={property='fixed', name='E'}
最终结果用顶部元素填充最后一个缺失的插槽
array[0]={property='dynamic', name='A'}
array[1]={property='dynamic', name='B'}
array[2]={property='fixed', name='C'}
array[3]={property='dynamic', name='F'}
array[4]={property='fixed', name='E'}
array[5]={property='dynamic', name='A'}
最快的方法是什么? (属性、数组大小和元素都是动态的)
【问题讨论】:
-
请澄清。什么是“数组”?您使用的是
numpy.array吗?还是array.array?还是普通的列表? -
这个操作是
O(n^2),你要把每一个元素都移位 -
任何运行一次的代码片段,或一次的某个线性倍数都将折叠成 o(n)。 o(n^2) 是您对完整排序(例如冒泡排序或选择排序)的期望;或者 o(n log n) 如果它是一种非常有效的排序,例如快速排序或 shell 排序。
-
也许我不清楚,
标签: python arrays sorting python-2.x