Ta bort element från en lista (array) i Python: clear(), pop(), remove(), del

Företag

För att ta bort ett element från en lista (array) av typen list i Python använder du listmetoderna clear(), pop() och remove(). Du kan också ange listans position och intervall genom att använda index eller slice och sedan ta bort den med hjälp av del-anvisningen.

Här finns följande information.

  • Ta bort alla element:clear()
  • Ta bort ett element på den angivna positionen och hämta dess värde.:pop()
  • Söker efter element med det angivna värdet och tar bort det första elementet.:remove()
  • Radering genom att ange position och intervall i indexskivan:del
  • Ta bort flera element som uppfyller kriterierna i en batch.:förteckning över indikationer för införande i förteckningen

Observera att listor kan lagra data av olika typer och skiljer sig strikt från matriser. Använd array (standardbiblioteket) eller NumPy när du vill hantera matriser för processer som kräver minnesstorlek eller minnesadress, eller för numeriska beräkningar av storskaliga data.

Ta bort alla element: clear()

I listmetoden clear() tas alla element bort, vilket resulterar i en tom lista.

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

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

Ta bort ett element på den angivna positionen och hämta dess värde.: pop()

Metoden pop() för en lista kan användas för att ta bort ett element på en angiven position och hämta värdet för det elementet.

Det första (inledande) numret är 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]

Ett negativt värde kan också användas för att ange positionen från slutet (sist). Slutet (sista) är -1.

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

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

Om argumentet utelämnas och ingen position anges tas elementet i slutet (sist) bort.

print(l.pop())
# 9

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

Om du anger en position som inte finns kommer ett fel att uppstå.

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

Observera att pop(0), som tar bort det första elementet, kräver följande kostnad och inte är en effektiv operation. Se följande sida på den officiella wikin för beräkningskomplexiteten för olika operationer på listor.
O(n)

O(1)Deque-typen finns i standardbibliotekets collections-modul som en typ som raderar element till toppen till denna kostnad. Om du till exempel vill behandla data som en kö (FIFO) är det effektivare att använda deque.

Söker efter element med det angivna värdet och tar bort det första elementet.: remove()

Listmetoden remove() kan användas för att söka efter element med samma värde som anges och ta bort det första elementet.

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

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

Om listan innehåller mer än ett element som matchar det angivna värdet tas endast det första bort.

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

Om ett icke-existerande värde anges uppstår ett fel.

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

Radering genom att ange position och intervall i indexskivan: del

Du kan också använda del-angivelsen för att ta bort element från listan.

Ange det element som ska tas bort med hjälp av dess index. Det första (inledande) indexet är 0 och det sista (slutliga) indexet är -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]

Om du anger ett intervall med skivor kan du ta bort flera element samtidigt.

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]

Det är också möjligt att ange hela intervallet och radera alla element.

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

[start:stop:step]Om du anger intervallet i skivan på det här sättet och anger ett stegvis steg kan du ta bort flera hoppande element på en gång.

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]

Mer information om skivning finns i följande artikel.

Ta bort flera element som uppfyller kriterierna i en batch.: förteckning över indikationer för införande i förteckningen

Processen att ta bort element som uppfyller villkoren är likvärdig med processen att lämna (utvinna) element som inte uppfyller villkoren. För denna typ av behandling används listförståelsenotationen.

Nedan visas ett exempel på hur man tar bort udda eller jämna element (= lämnar kvar jämna eller udda element).
%Detta är restoperatorn.
i % 2
Detta är återstoden av i dividerat med 2.

I listförståelse-notationen skapas en ny lista. Till skillnad från de listtypsmetoder som hittills presenterats förblir den ursprungliga listan oförändrad.

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]

Andra exempel. En mängd olika bearbetningar är möjliga beroende på det villkorliga uttrycket.

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

Om du vill ta bort dubbla element använder du typen set set.

print(list(set(l)))
# ['David', 'Alice', 'Charlie', 'Bob']
Copied title and URL