在python中重新排序固定的legth数组

时间:2016-06-07 16:33:06

标签: python arrays sorting python-2.x

我正在寻找在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'}

最快的方法是什么? (属性,数组大小和元素都是动态的)

2 个答案:

答案 0 :(得分:1)

我假设你正在使用python列表

前三行只创建一个包含3个项目的列表。请改用您的列表。

Pop会删除提供的索引处的项目并返回其值 a.append(a [0])获取第一个项目,并将其附加到列表的末尾

>>> a.append(0)
>>> a.append(1)
>>> a.append(2)
>>> a
[0, 1, 2]
>>> p = a.pop(1)
>>> p
1
>>> a
[0, 2]
>>> a.append(a[0])
>>> a
[0, 2, 0]
>>> 

在我的示例中,a保存单个值,但它可以包含类似于示例的dict。代码是相同的

答案 1 :(得分:0)

joel goldstick的回答可能是你最好的选择。在某种程度上,您需要移动列表的其余部分以填补空白。这是一个以编程方式执行相同操作的示例:

removeIndex = 6                              //index to remove
for i in range(removeIndex+1, len(ary)-1):   //from next index to end of array
  ary[i-1] = ary[i]                          //move the item down one
ary[len(ary) - 1] = ary[0];                  //duplicate the first in the last position