Форум сайта python.su
Коллеги, помогите :-)
Стоит следующая задача. Есть два массива x и y, содержащих координаты некоторых точек на плоскости. Как без копирования массивов x и y удалить из них скажем j, k и m-ю точки? Как это сделать изящно?
Отредактировано SeregaGomen (Июль 13, 2017 20:44:38)
Офлайн
>>> l =[1,2,3,4] >>> l.pop(2) 3 >>> l [1, 2, 4] >>>
Офлайн
А как синхронизировать удаление второй координаты? А если нужно несколько элементов удалить? Их же индексы поменяются после удаления предыдущих элементов.
Офлайн
удаляйте с конца массива.
>>> 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]
>>>
Офлайн
> Есть два массива 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]
Отредактировано Rodegast (Июль 13, 2017 21:05:47)
Офлайн
ну если есть возможность получить удаляемые элементы в список то возможно так
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)
Отредактировано marvellik (Июль 13, 2017 21:10:30)
Офлайн
Ок, спасибо :-)
Буду пробовать. Идею понял.
Насчет хранения координат в одном массиве - согласен. Так даже проще будет…
Офлайн
> ну если есть возможность получить удаляемые элементы в список то возможно так
Тогда лучше так:
>>> 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]
Офлайн
SeregaGomenА овчинка выделки точно стоит?
Как без копирования массивов x и y удалить из них скажем j, k и m-ю точки?
Офлайн
Если точек предполагается очень много, то для эффективности рекомендуется использовать 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)
Отредактировано scidam (Июль 14, 2017 03:37:39)
Офлайн