Уведомления

Группа в Telegram: @pythonsu

#1 Июль 13, 2017 20:43:19

SeregaGomen
Зарегистрирован: 2017-06-24
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Нестандартное удаление элементов из массива

Коллеги, помогите :-)
Стоит следующая задача. Есть два массива x и y, содержащих координаты некоторых точек на плоскости. Как без копирования массивов x и y удалить из них скажем j, k и m-ю точки? Как это сделать изящно?

Отредактировано SeregaGomen (Июль 13, 2017 20:44:38)

Офлайн

#2 Июль 13, 2017 20:48:37

vic57
Зарегистрирован: 2015-07-07
Сообщения: 913
Репутация: +  127  -
Профиль  

Нестандартное удаление элементов из массива

 >>> l =[1,2,3,4]
>>> l.pop(2)
3
>>> l
[1, 2, 4]
>>> 

Офлайн

#3 Июль 13, 2017 20:50:31

SeregaGomen
Зарегистрирован: 2017-06-24
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Нестандартное удаление элементов из массива

А как синхронизировать удаление второй координаты? А если нужно несколько элементов удалить? Их же индексы поменяются после удаления предыдущих элементов.

Офлайн

#4 Июль 13, 2017 21:00:28

vic57
Зарегистрирован: 2015-07-07
Сообщения: 913
Репутация: +  127  -
Профиль  

Нестандартное удаление элементов из массива

удаляйте с конца массива.

>>> 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]
>>>

Офлайн

#5 Июль 13, 2017 21:01:37

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2830
Репутация: +  186  -
Профиль   Отправить e-mail  

Нестандартное удаление элементов из массива

> Есть два массива 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)

Офлайн

#6 Июль 13, 2017 21:08:59

marvellik
Зарегистрирован: 2016-05-15
Сообщения: 639
Репутация: +  73  -
Профиль   Отправить e-mail  

Нестандартное удаление элементов из массива

ну если есть возможность получить удаляемые элементы в список то возможно так

 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)

Офлайн

#7 Июль 13, 2017 21:10:49

SeregaGomen
Зарегистрирован: 2017-06-24
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Нестандартное удаление элементов из массива

Ок, спасибо :-)
Буду пробовать. Идею понял.
Насчет хранения координат в одном массиве - согласен. Так даже проще будет…

Офлайн

#8 Июль 13, 2017 21:17:49

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2830
Репутация: +  186  -
Профиль   Отправить e-mail  

Нестандартное удаление элементов из массива

> ну если есть возможность получить удаляемые элементы в список то возможно так

Тогда лучше так:

 >>> 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]



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#9 Июль 13, 2017 21:58:35

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Нестандартное удаление элементов из массива

SeregaGomen
Как без копирования массивов x и y удалить из них скажем j, k и m-ю точки?
А овчинка выделки точно стоит?

Офлайн

#10 Июль 14, 2017 03:36:24

scidam
Зарегистрирован: 2016-06-15
Сообщения: 288
Репутация: +  35  -
Профиль   Отправить e-mail  

Нестандартное удаление элементов из массива

Если точек предполагается очень много, то для эффективности рекомендуется использовать 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)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version