Python - Entfernen Sie eine Reihe von einer Liste aus einer anderen Liste
array1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
array2 = [1, 2, 2, 2, 5, 6, 6, 6, 9]
temp = set(array2)
array1.remove(temp)
Traceback (most recent call last):
File "Sudoku V2.py", line 6, in <module>
array1.remove(temp)
ValueError: list.remove(x): x not in list
Welchen Teil der Fehlermeldung ist verwirrend?
Was tun Sie eigentlich wollen, entfernen von array1 zurück? Jedes element von Matrix2?
was ist deine Frage???
Im Allgemeinen hilft es, wenn Sie die gewünschte Ausgabe anstatt uns raten zu. Siehe SSCCE für die Führung.
set(array2)
ist nicht in array1
.Was tun Sie eigentlich wollen, entfernen von array1 zurück? Jedes element von Matrix2?
was ist deine Frage???
Im Allgemeinen hilft es, wenn Sie die gewünschte Ausgabe anstatt uns raten zu. Siehe SSCCE für die Führung.
InformationsquelleAutor DGDD | 2013-09-16
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen Sie dies:
Den oben genannten nutzt die Unterschied() Methode der Mengen, die es gibt ein neues set mit Elemente in der Menge, nicht in der iterierbar(s) erhalten als parameter. Beachten Sie, dass es gibt keine Notwendigkeit, zu konvertieren
array2
zu einer Reihe für diese zu arbeiten.Sich auch bewusst sein, dass durch die Verwendung von sets, alle doppelten Elemente entfernt und die ursprüngliche Reihenfolge der iterables wird nicht unbedingt beibehalten werden. Wenn das ist ein Problem, versuchen Sie diese alternative Lösung:
Das ist perfekt! Dank einem Haufen!
Ich habe nicht downvote, aber ich vermute, wer auch immer das war, Taten das, weil Sie Ihre Antwort gibt eine Menge zurück, die Zerstörung jeglicher Ordnung in der ursprünglichen
array1
, und alle doppelten Werte. Ich sehe nicht ein guter Grund, in den OP ' s Frage davon ausgehen, dass dies nicht akzeptabel ist. Aber es wäre eine bessere Antwort, wenn Sie erklärt, die Folgen zu tun, es auf diese Weise (und bietet eine andere alternative, wenn Sie nicht akzeptabel).Super!!! wenn diese Antwort hilfreich war für Sie, bitte beachten Sie akzeptieren es, indem Sie auf das Häkchen auf der linken Seite 😉
Deine Antwort war genau das, was ich suchte, Oscar. Ihre Hilfe ist sehr geschätzt!
InformationsquelleAutor Óscar López
Wenn Sie kümmern sich nicht um die Reihenfolge der Elemente in der Ergebnis-oder etwa doppelte Elemente
set.difference
wie im Óscar López Antwort, ist genau das, was Sie wollen.Wenn Sie tun kümmern, Ordnung und Erhaltung der Duplikate, die einfachste Möglichkeit ist, einfach erstellen Sie eine neue Liste, die heraus filtern, die in
array2
:Wenn Sie brauchen, um zerstörungsfrei ändern
array1
in-place-statt ein neues bauen, ist es fast immer einfacher, nur destruktiv ersetzen Sie den Inhaltarray1
alle auf einmal:Wenn Sie wirklich wollen, um es zu ändern, element nach element, ist der beste Weg zu Durchlaufen
array1
rückwärts zu entfernen-Ort:Schließlich, Sie kann Mach es so wie flornquake vorgeschlagen, aber das wird dauern, quadratische Zeit statt linear, da braucht es keinen Vorteil der
set
; für jedes element inset2
bedeutet es einen linearenarray1.remove
.Was ich meine ist, dass
array1 = [item for item in array1 if item not in set(array2)]
solltes = set(array2); array1 = [item for item in array1 if item not in s]
zu vermeiden, quadratisches Verhalten.Danke. Ich war schon dabei, dass in den späteren Beispielen aber nicht der erste. Behoben.
InformationsquelleAutor abarnert
Wollen Sie array1 - array2?
set1 = set(array1)
set2 = set(array2)
set1.Unterschied(set2) ist, was Sie wollen.
array2
zu einem Satz,difference
nimmt eine iterierbar als argument, siehe meine Antwort.Willkommen zu Stack-Overflow! Sie können Einrücken von code mit vier Leerzeichen zu formatieren schön, oder umgeben Sie es durch das ` - Zeichen (backtick)
du hast Recht, danke.
es zu bekommen, vielen Dank.
InformationsquelleAutor Rong Zhao
s -> Folge
http://docs.python.org/3/library/stdtypes.html#index-23
Keines der Elemente von Matrix1 ist ein Satz. Alle Elemente in array1 sind Ganzzahlen.
InformationsquelleAutor 7stud
Den
remove()
- Methode nimmt ein einzelnes element der Liste, also müssen wir es nennen, einmal für jedes element:Andere Methoden wie Óscar und abanert s besser sind wenn, Sie mehr idiomatische und viel effizienter.
Du hast Recht, danke für den Hinweis. Ich habe bearbeitet meine Antwort zu klären, aber ich lasse den rest, denn es erklärt die remove-Methode, dass die OP missbraucht.
InformationsquelleAutor flornquake