Выдаленне элементаў са спісу (масіўу) у Python: clear(), pop(), remove(), del

Бізнэс

Каб выдаліць элемент са спісу (масіва) тыпу list у Python, выкарыстоўвайце метады спісу clear(), pop() і remove(). Вы таксама можаце вызначыць пазіцыю і дыяпазон спісу, выкарыстоўваючы індэкс або зрэз, а затым выдаліць яго з дапамогай аператара del.

Тут прадстаўлена наступная інфармацыя.

  • Выдаліце ​​ўсе элементы:clear()
  • Выдаліце ​​элемент у паказанай пазіцыі і атрымаеце яго значэнне.:pop()
  • Шукае элементы з зададзеным значэннем і выдаляе першы элемент.:remove()
  • Выдаленне шляхам указання пазіцыі і дыяпазону ў індэксным зрэзе:del
  • Пакетнае выдаленне некалькіх элементаў, якія адпавядаюць крытэрам.:паказанне ўключэння ў спіс

Звярніце ўвагу, што спісы могуць захоўваць даныя розных тыпаў і строга адрозніваюцца ад масіваў. Выкарыстоўвайце масіў (стандартная бібліятэка) або NumPy, калі вы хочаце апрацоўваць масівы для працэсаў, якія патрабуюць памеру памяці або адраса памяці, або для лікавых вылічэнняў буйнамаштабных даных.

Выдаліце ​​ўсе элементы:clear()

У метадзе спісу clear() усе элементы выдаляюцца, у выніку чаго спіс застаецца пустым.

l = list(range(10))
print(l)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

l.clear()
print(l)
# []

Выдаліце ​​элемент у паказанай пазіцыі і атрымаеце яго значэнне.:pop()

Метад pop() спісу можна выкарыстоўваць, каб выдаліць элемент у зададзенай пазіцыі і атрымаць значэнне гэтага элемента.

Першы (пачатковы) лік роўны 0.

l = list(range(10))
print(l)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

print(l.pop(0))
# 0

print(l)
# [1, 2, 3, 4, 5, 6, 7, 8, 9]

print(l.pop(3))
# 4

print(l)
# [1, 2, 3, 5, 6, 7, 8, 9]

Адмоўнае значэнне таксама можа быць выкарыстана для ўказання пазіцыі з канца (апошняга). Канец (апошні) -1.

print(l.pop(-2))
# 8

print(l)
# [1, 2, 3, 5, 6, 7, 9]

Калі аргумент апушчаны і пазіцыя не вызначана, элемент у канцы (апошні) выдаляецца.

print(l.pop())
# 9

print(l)
# [1, 2, 3, 5, 6, 7]

Указанне неіснуючай пазіцыі прывядзе да памылкі.

# print(l.pop(100))
# IndexError: pop index out of range

Звярніце ўвагу, што pop(0), які выдаляе першы элемент, патрабуе наступных выдаткаў і не з’яўляецца эфектыўнай аперацыяй. Вылічальную складанасць розных аперацый са спісамі глядзіце на наступнай старонцы афіцыйнай вікі.
O(n)

O(1)Тып deque прадастаўляецца ў модулі стандартных бібліятэчных калекцый як тып, які выдаляе элементы зверху за гэты кошт. Напрыклад, калі вы хочаце разглядаць дадзеныя як чаргу (FIFO), больш эфектыўна выкарыстоўваць deque.

Шукае элементы з зададзеным значэннем і выдаляе першы элемент.:remove()

Метад спісу remove() можа быць выкарыстаны для пошуку элементаў з такім жа значэннем, што і пазначана, і выдалення першага элемента.

l = ['Alice', 'Bob', 'Charlie', 'Bob', 'Dave']
print(l)
# ['Alice', 'Bob', 'Charlie', 'Bob', 'Dave']

l.remove('Alice')
print(l)
# ['Bob', 'Charlie', 'Bob', 'Dave']

Калі спіс змяшчае больш за адзін элемент, які адпавядае зададзенаму значэнню, будзе выдалены толькі першы.

l.remove('Bob')
print(l)
# ['Charlie', 'Bob', 'Dave']

Калі зададзена неіснуючае значэнне, узнікае памылка.

# l.remove('xxx')
# ValueError: list.remove(x): x not in list

Выдаленне шляхам указання пазіцыі і дыяпазону ў індэксным зрэзе:del

Вы таксама можаце выкарыстоўваць аператар del для выдалення элементаў са спісу.

Пакажыце элемент, які трэба выдаліць, па яго індэксе. Першы (пачатковы) індэкс роўны 0, а апошні (канчатковы) -1.

l = list(range(10))
print(l)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

del l[0]
print(l)
# [1, 2, 3, 4, 5, 6, 7, 8, 9]

del l[-1]
print(l)
# [1, 2, 3, 4, 5, 6, 7, 8]

del l[6]
print(l)
# [1, 2, 3, 4, 5, 6, 8]

Калі вы задасце дыяпазон з лустачкамі, вы можаце выдаліць некалькі элементаў адначасова.

l = list(range(10))
print(l)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

del l[2:5]
print(l)
# [0, 1, 5, 6, 7, 8, 9]

l = list(range(10))
del l[:3]
print(l)
# [3, 4, 5, 6, 7, 8, 9]

l = list(range(10))
del l[4:]
print(l)
# [0, 1, 2, 3]

l = list(range(10))
del l[-3:]
print(l)
# [0, 1, 2, 3, 4, 5, 6]

Таксама можна паказаць увесь дыяпазон і выдаліць усе элементы.

l = list(range(10))
del l[:]
print(l)
# []

[start:stop:step]Калі вы задасце дыяпазон у зрэзе такім чынам і задасце крок нарастання, вы можаце выдаліць некалькі элементаў скачка адначасова.

l = list(range(10))
del l[2:8:2]
print(l)
# [0, 1, 3, 5, 7, 8, 9]

l = list(range(10))
del l[::3]
print(l)
# [1, 2, 4, 5, 7, 8]

Больш падрабязную інфармацыю аб нарэзцы глядзіце ў наступным артыкуле.

Пакетнае выдаленне некалькіх элементаў, якія адпавядаюць крытэрам.:паказанне ўключэння ў спіс

Працэс выдалення элементаў, якія задавальняюць умовам, эквівалентны працэсу пакідання (здабывання) элементаў, якія не задавальняюць умовам. Для гэтага віду апрацоўкі выкарыстоўваецца абазначэнне разумення спісу.

Прыклад выдалення няцотных або цотных элементаў (= пакіданне цотных або няцотных элементаў) паказаны ніжэй.
%Гэта аператар рэшты.
i % 2
Гэта астатняя частка i падзелена на 2.

У запісе для разумення спісу ствараецца новы спіс. У адрозненне ад метадаў тыпу спісу, уведзеных да гэтага часу, першапачатковы спіс застаецца нязменным.

l = list(range(10))
print(l)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

print([i for i in l if i % 2 == 0])
# [0, 2, 4, 6, 8]

print([i for i in l if i % 2 != 0])
# [1, 3, 5, 7, 9]

print(l)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Іншыя прыклады. У залежнасці ад умоўнага выразу магчымая разнастайная апрацоўка.

l = ['Alice', 'Bob', 'Charlie', 'Bob', 'David']
print(l)
# ['Alice', 'Bob', 'Charlie', 'Bob', 'David']

print([s for s in l if s != 'Bob'])
# ['Alice', 'Charlie', 'David']

print([s for s in l if s.endswith('e')])
# ['Alice', 'Charlie']

Калі вы хочаце выдаліць паўтаральныя элементы, выкарыстоўвайце тып набора.

print(list(set(l)))
# ['David', 'Alice', 'Charlie', 'Bob']