Symmetrische Differenz basierend auf einer Funktion

PythonPythonBeginner
Jetzt üben

This tutorial is from open-source community. Access the source code

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In Python ist die symmetrische Differenz zwischen zwei Listen eine neue Liste, die alle Elemente enthält, die in einer der ursprünglichen Listen vorhanden sind, aber nicht in beiden. In dieser Herausforderung werden wir eine Funktion schreiben, die die symmetrische Differenz zwischen zwei Listen zurückgibt, nachdem die bereitgestellte Funktion auf jedes Listelement beider Listen angewendet wurde.

Symmetrische Differenz basierend auf einer Funktion

Schreiben Sie eine Funktion symmetric_difference_by(a, b, fn), die zwei Listen a und b sowie eine Funktion fn annimmt. Die Funktion sollte eine neue Liste zurückgeben, die alle Elemente enthält, die in einer der ursprünglichen Listen vorhanden sind, aber nicht in beiden, nachdem die bereitgestellte Funktion auf jedes Listelement beider Listen angewendet wurde.

Um dieses Problem zu lösen, können Sie die folgenden Schritte ausführen:

  1. Erstellen Sie eine Menge, indem Sie fn auf jedes Element in jeder Liste anwenden.
  2. Verwenden Sie eine Listenkomprehension in Kombination mit fn auf jeder der beiden Listen, um nur die Werte zu behalten, die nicht in der zuvor erstellten Menge der anderen Liste enthalten sind.
  3. Verketten Sie die beiden Listen, die in Schritt 2 erhalten wurden.

Die Funktion sollte die folgenden Parameter haben:

  • a: Eine Liste von Elementen
  • b: Eine Liste von Elementen
  • fn: Eine Funktion, die ein Element annimmt und einen neuen Wert zurückgibt

Die Funktion sollte eine neue Liste zurückgeben, die alle Elemente enthält, die in einer der ursprünglichen Listen vorhanden sind, aber nicht in beiden, nachdem die bereitgestellte Funktion auf jedes Listelement beider Listen angewendet wurde.

def symmetric_difference_by(a, b, fn):
  (_a, _b) = (set(map(fn, a)), set(map(fn, b)))
  return [item for item in a if fn(item) not in _b] + [item
          for item in b if fn(item) not in _a]
from math import floor

symmetric_difference_by([2.1, 1.2], [2.3, 3.4], floor) ## [1.2, 3.4]

Zusammenfassung

In dieser Herausforderung haben wir gelernt, wie man eine Funktion schreibt, die die symmetrische Differenz zwischen zwei Listen zurückgibt, nachdem die bereitgestellte Funktion auf jedes Listelement beider Listen angewendet wurde. Wir haben dazu eine Menge und eine Listenkomprehension verwendet.