【问题标题】:reordering fixed legth array in python在python中重新排序固定长度数组
【发布时间】: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


【解决方案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。代码是一样的

【讨论】:

    【解决方案2】:

    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
    

    【讨论】:

      猜你喜欢
      • 2019-07-18
      • 2011-05-30
      • 1970-01-01
      • 1970-01-01
      • 2011-05-18
      • 1970-01-01
      • 2021-03-23
      • 1970-01-01
      相关资源
      最近更新 更多