2016-06-07 2 views
1

Я ищу лучший способ для выполнения этой задачи в Python 2.xпереназначения фиксированный legth массив в Python

У меня есть массив заданного размера, с каким-то элементом, который должен оставаться в заданном положении, идентифицированном атрибут.

Мне нужно удалить элемент из массива и перенести все нефиксированные элементы в верхнюю часть и заполнить недостающую нижнюю запись копией первой записи.

Пример

Запуск массива:

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'} 

Move не являющиеся фиксированные элементы к началу

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'} 

конечный результат заполнения последний недостающий слот Wi й верхний элемент

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'} 

Что может быть самым быстрым способом для этого? (Свойство, размер массива и элементы все динамики)

+1

Просьба уточнить. Что такое «массив»? Вы используете 'numpy.array'? Или 'array.array'? Или обычный список? – Kevin

+0

Эта операция - «O (n^2)», вам нужно сдвинуть каждый элемент. –

+0

Любой снимок кода, который запускается один раз, или несколько линейных кратных один раз рухнет на o (n). o (n^2) - это то, что вы ожидаете от полного сортировки (например, сортировка пузыря или сортировка сортировки); или o (n log n), если это действительно эффективный вид, похожий на быстрый или shell-тип. – codingCat

ответ

1

Я предполагаю, что вы используете списки питона

Первые три строки просто создать список с 3-х пунктов. Вместо этого используйте свои списки.

Pop удаляет элемент в индексе при условии, и возвращает его значение a.append (а [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 хранит одиночные значения, но может содержать диктофон, как в вашем примере. Код тот же

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 
Смежные вопросы