547 Stimmen

Alle Vorkommen eines Wertes aus einer Liste entfernen?

In Python remove() entfernt das erste Vorkommen eines Wertes in einer Liste.

So entfernen Sie todo Vorkommen eines Wertes in einer Liste?

Das ist es, was ich im Sinn habe:

>>> remove_values_from_list([1, 2, 3, 4, 2, 2, 3], 2)
[1, 3, 4, 3]

1voto

Asir Ajmal Punkte 11

Ich habe das gerade für eine Liste gemacht. Ich bin nur ein Anfänger. Ein etwas fortgeschrittener Programmierer kann sicherlich eine Funktion wie diese schreiben.

for i in range(len(spam)):
    spam.remove('cat')
    if 'cat' not in spam:
         print('All instances of ' + 'cat ' + 'have been removed')
         break

1voto

Josh Punkte 1722

Niemand hat eine optimale Lösung für die Zeit- und Raumkomplexität veröffentlicht, also dachte ich, ich versuche es mal. Hier ist eine Lösung, die alle Vorkommen eines bestimmten Wertes entfernt, ohne ein neues Array zu erstellen, und das bei effizienter Zeitkomplexität. Der Nachteil ist, dass die Elemente nicht erhalten bleiben Bestellung .

Zeitliche Komplexität: O(n)
Zusätzliche Raumkomplexität: O(1)

def main():
    test_case([1, 2, 3, 4, 2, 2, 3], 2)     # [1, 3, 3, 4]
    test_case([3, 3, 3], 3)                 # []
    test_case([1, 1, 1], 3)                 # [1, 1, 1]

def test_case(test_val, remove_val):
    remove_element_in_place(test_val, remove_val)
    print(test_val)

def remove_element_in_place(my_list, remove_value):
    length_my_list = len(my_list)
    swap_idx = length_my_list - 1

    for idx in range(length_my_list - 1, -1, -1):
        if my_list[idx] == remove_value:
            my_list[idx], my_list[swap_idx] = my_list[swap_idx], my_list[idx]
            swap_idx -= 1

    for pop_idx in range(length_my_list - swap_idx - 1):
        my_list.pop() # O(1) operation

if __name__ == '__main__':
    main()

1voto

ARHAM RUMI Punkte 195

Viele der Antworten sind wirklich gut. Hier ist ein einfacher Ansatz, wenn Sie ein Anfänger in Python sind, falls Sie die remove() Methode sicher.

rawlist = [8, 1, 8, 5, 8, 2, 8, 9, 8, 4]

ele_remove = 8

for el in rawlist:
    if el == ele_remove:
        rawlist.remove(ele_remove)

Bei zu großen Listen kann es langsamer sein.

1voto

Faraaz Kurawle Punkte 842

Wenn Ihre Liste nur Duplikate von nur einem Element enthält, zum Beispiel list_a=[0,0,0,0,0,0,1,3,4,6,7] wäre der folgende Code hilfreich:

list_a=[0,0,0,0,0,0,1,3,4,6,7]
def remove_element(element,the_list):
    the_list=list(set(the_list))
    the_list.remove(element)
    return the_list

list_a=remove_element(element=0,the_list=list_a)
print(list_a)

o

a=list(set(i for i in list_a if i!=2))
a.remove(2)

Der Grundgedanke ist, dass die sets lassen keine Duplikate zu, also habe ich die Liste zunächst in set( wodurch die Duplikate entfernt werden ), dann verwendet .remove() Funktion, um die erste Instanz des Elements zu entfernen( da wir jetzt nur eine Instanz pro Artikel haben ).


Wenn Sie jedoch Duplikate von mehreren Elementen haben, helfen Ihnen die folgenden Methoden:

  1. Verständnis der Liste

    list_a=[1, 2, 3, 4, 2, 2, 3] remove_element=lambda element,the_list:[i for i in the_list if i!=element] print(remove_element(element=2,the_list=list_a))

  2. Filter

    list_a=[1, 2, 3, 4, 2, 2, 3] a=list(filter(lambda a: a != 2, list_a)) print(a)

  3. While-Schleife

    list_a=[1, 2, 3, 4, 2, 2, 3] def remove_element(element,the_list): while element in the_list:the_list.remove(element) return the_list print(remove_element(2,list_a))

  4. for-Schleife (wie bei List comprehension)

    list_a=[1, 2, 3, 4, 2, 2, 3] a=[] for i in list_a: if i!=2: a.append(i) print(a)

0voto

Moobius Punkte 59

Wenn Sie nicht über eingebaute filter oder keinen zusätzlichen Platz benötigen und eine lineare Lösung brauchen...

def remove_all(A, v):
    k = 0
    n = len(A)
    for i in range(n):
        if A[i] !=  v:
            A[k] = A[i]
            k += 1

    A = A[:k]

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X