Найти - Пользователи
Полная версия: Нестандартное удаление элементов из массива
Начало » Python для новичков » Нестандартное удаление элементов из массива
1 2
SeregaGomen
Коллеги, помогите :-)
Стоит следующая задача. Есть два массива x и y, содержащих координаты некоторых точек на плоскости. Как без копирования массивов x и y удалить из них скажем j, k и m-ю точки? Как это сделать изящно?
vic57
 >>> l =[1,2,3,4]
>>> l.pop(2)
3
>>> l
[1, 2, 4]
>>> 
SeregaGomen
А как синхронизировать удаление второй координаты? А если нужно несколько элементов удалить? Их же индексы поменяются после удаления предыдущих элементов.
vic57
удаляйте с конца массива.
>>> l = [ i for i in range(20)]
>>> ijk = [3,2,7]
>>> for i in sorted(ijk)[::-1]: l.pop(i)

7
3
2
>>> l
[0, 1, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
>>>
Rodegast
> Есть два массива x и y, содержащих координаты некоторых точек на плоскости

Плохая идея хранить координаты в двух разных списках. У тебя должен быть список пар:
 [(1,5), (2,7), (3,8)]
С удалением всё очень просто:
 >>> x = [1,2,3]
>>> y = [5,7,8]
>>> del x[0]
>>> del y[0]
>>> x
[2, 3]
>>> y
[7, 8]
>>> x = range(5)
>>> x
[0, 1, 2, 3, 4]
>>> del x[:3]
>>> x
[3, 4]
marvellik
ну если есть возможность получить удаляемые элементы в список то возможно так
 l =[1,2,3,4,5,6,7,8]
list_del = [1,4,7,8] # список элементов для удаления
index_del = [l.index(i) for i in l if i in list_del] # получаем индексы удаляемых злементов
for i in reversed(range(len(l))):
    if i in index_del:
        l.pop(i)
print(l)
SeregaGomen
Ок, спасибо :-)
Буду пробовать. Идею понял.
Насчет хранения координат в одном массиве - согласен. Так даже проще будет…
Rodegast
> ну если есть возможность получить удаляемые элементы в список то возможно так

Тогда лучше так:
 >>> l = [1,2,3,4,5,6,7,8]
>>> list_del = [1,4,7,8]
>>> for x in list_del:
...         l.remove(x)
>>> l
[2, 3, 5, 6]
Shaman
SeregaGomen
Как без копирования массивов x и y удалить из них скажем j, k и m-ю точки?
А овчинка выделки точно стоит?
scidam
Если точек предполагается очень много, то для эффективности рекомендуется использовать numpy.
В numpy эта задача решается просто.

 import numpy as np
x = np.array([[12,13],[10,13],[43,23]])
np.delete(x, [0,2], axis=0)

В общем случае будет
 np.delete(x, [j,k,m], axis=0)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB