2 Stimmen

Die idiomatischste Art, den Modulo auf eine Liste in Python anzuwenden

Derzeit habe ich eine Liste mit einigen nicht wiederholten positiven Ganzzahlen darin, sagen wir a = [1,2,6,15,19]

Was ist der idiomatischste Weg, eine Funktion zu erstellen, die eine neue Liste zurückgibt, die das Modulo %x jedes Elements von a ist, ohne wiederholte Elemente im Output zu haben?

Speziell möchte ich, dass f(a,x) [1%x,2%x,6%x,15%x,19%x] zurückgibt, ohne die wiederholten Elemente.

Zum Beispiel würde f([1,2,6,15,19],4) [1,2,3] zurückgeben

6voto

Martijn Pieters Punkte 953257

Verwenden Sie eine Listenabstraktion und ein set(), um Duplikate herauszufiltern und die Reihenfolge beizubehalten:

def f(values, x):
    gesehen = set()
    add = gesehen.add
    return [res for res in (i % x for i in values) if res not in gesehen and not add(res)]

Demo:

>>> f([1,2,6,15,19], 4)
[1, 2, 3]

Wenn die Reihenfolge nicht beibehalten werden muss, verwenden Sie einfach eine Mengenabstraktion stattdessen und geben Sie die resultierende Menge zurück:

def f(values, x):
    return {i % x for i in values}

4voto

Justin Punkte 41677

Um die Liste des Sets zurückzugeben, benötigen Sie eine Set-Abbildung, die in einer Liste verpackt ist.

def f(l, x):
    return list({i % x for i in l})

Wie in den Fragekommentaren angegeben, ist es möglicherweise am besten, das Set zurückzugeben.

def f(l, x):
    return {i % x for in l}

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