Оптимальный метод для удаления части массива в python - PullRequest
0 голосов
/ 14 апреля 2020

У меня есть список: a = [1,2,3,4,5, -1,5,1,1, -1] Я хочу удалить все элементы до того, как встретится первое отрицательное число, у меня нет способа зная индекс числа. Результирующий список должен быть: a = [- 1,5,1,1, -1]

У меня есть такой код:

a = [1,2,3,4,5,-1,5,1,1,-1]
while a[0] > 0 :
    a.pop(0)
print(a)

Этот код производит желаемый вывод, но Есть ли способ, которым я могу сделать это без итерации? Использование numpy массивов приветствуется.

Ответы [ 3 ]

3 голосов
/ 14 апреля 2020

Ваш код неполон, однако он удаляет все элементы массива numpy перед отрицательным без использования циклов.

import numpy  as np
aa = np.array([1, 2, 3, 4, 5, -1, 4, 5])
print(aa)

i = np.argmax(aa<0)
print(i)

aa = np.delete(aa, np.s_[:i])
print(aa)
1 голос
/ 14 апреля 2020

Использование NumPy:

np_a = np.asarray(a)
np_a[np.argmax(np_a < 0):]

Сначала мы преобразуем список Python a в массив NumPy, чтобы учесть векторизованные операции. Затем мы используем операцию argmax, чтобы найти первый индекс, где np_a < 0. В этом случае np.argmax(np_a < 0) просто вернет 5, индекс элемента, который является первым появлением отрицательного значения.

Все, что нам нужно сделать, это нарезать массив так, чтобы мы получили все элементы, начиная с индекса 5.

1 голос
/ 14 апреля 2020

Ваш код работает с обычным списком, а не с массивом numpy.

Вы можете просто l oop просмотреть список до первого отрицательного значения, а затем нарезать данные по списку:

a=[1,2,3,4,5,-1,5,1,1,-1]

for idx, value in enumerate(a):
    if value < 0: 
        a = a[idx:]
        break

print(a)

Вывод:

[-1, 5, 1, 1, -1]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...