[PYTHON] Vergleichen Sie, wie die Verarbeitung für Listen nach Sprache geschrieben wird

Was würde passieren, wenn ich Java7 die ganze Zeit berühren und diesen Prozess plötzlich in einer anderen Sprache schreiben würde? Ich dachte, also werde ich einen Moment darüber nachdenken. Aus diesem Grund habe ich über die Verarbeitung von Arrays nachgedacht, die in Web-Apps üblich ist.

Bedarf

↓ Grenzen Sie die Liste von json oder map auf Alter> 25 ein und sortieren Sie sie nach Alter in aufsteigender Reihenfolge

[
  {"age":25, "name": "adam"},
  {"age":60, "name": "adamo"},
  {"age":30, "name": "larry"}
]

Fall 1: Python (2.7)

In Python werden Funktionen höherer Ordnung durch integrierte Funktionen definiert. Während Sie schreiben, wird die Verschachtelung allmählich tiefer. Aus diesem Grund ist es schwer zu verstehen, welche Art von Array-Verarbeitung für was selbst mit einer solchen Quelle durchgeführt wird.


users= [
  {"name":"adam","age":25},
  {"name":"adamo","age":60},
  {"name":"larry","age":30}
]

sorted(
  filter(lambda a: a['age']>25,
    users
  ),
  key=lambda a:a['age']
)

Fall 2: Python (2.7) Anderer Ansatz

Curry wird unter Verwendung von Partial durchgeführt, und eine Methodenkette wird unter Verwendung von Reduce durchgeführt. Es scheint nicht so, als würde es allein herauskommen, aber es kann besser sein, wenn die Auswertung durch Rückgabe einer Methode wie xrange verschoben werden kann.

from functools import partial
def chain(*args):
   return reduce(lambda x,f:f(x), args)

filter25 = partial(filter, lambda a: a['age']>25)
sortbyage = partial(sorted, key=lambda a:a['age'])

users=[
  {"name":"adam","age":25},
  {"name":"adamo","age":60},
  {"name":"larry","age":30}
]
chain(
  users,
  filter25,
  sortbyage
)

Fall 3: Scala

einfach.

val users: List[Map[Symbol,String]] = List(
  Map('age->"25", 'name->"adam"),
  Map('age->"60", 'name->"adamo"),
  Map('age->"30", 'name->"larry")
)
users.filter(n => n.get('age).get.toInt > 25)
.sortBy(_.get('age).get)

Wenn Sie die Karte behalten, fehlt ihr die Sicherheit. Ich denke, es ist eine gute Idee, es am Anfang wieder in das Klassenarray zu setzen oder es in der Mitte abzubilden.

//Muster von Anfang an zu ändern
val users: List[Person] = List(
  new Person(25, "adam"),
  new Person(60,"adamo"),
  new Person(30,"larry")
)
users.filter(n => n.age > 25)
.sortBy(_.age)
//Muster auf dem Weg zu ändern
val users: List[Map[Symbol,String]] = List(
  Map('age->"25", 'name->"adam"),
  Map('age->"60", 'name->"adamo"),
  Map('age->"30", 'name->"larry")
)
users.map(n => new Person(n('age).toInt, n('name)))
.filter(n => n.age > 25)
.sortBy(_.age)

Fall 4: Java7 mit Guave:

Tatsächlich gab es eine Person, die eine solche Quelle schrieb. Es ist etwas einfacher zu verstehen, wenn Sie Kenntnisse über Guaven haben ... Ich habe es richtig geschrieben, und als ich es bemerkte, benutzte ich die Klasse. Die Anfrage unterscheidet sich von der von Python.

List<Map<String, String>> users = ImmutableList.of<Map<String, String>>(
        ImmutableMap.of("name", "adam", "age", "25"),
        ImmutableMap.of("name", "adamo", "age", "60"),
        ImmutableMap.of("name", "larry", "age", "30")
);
FluentIterable
.from(users)
.transform(new Function<Map<String, String>, Person>(){
    @Override
    public Person apply(Map<String,String> map){
        return new Person(map.get("name"), new Integer(map.get("age")));
    }
})
.filter(new Predicate<Person>(){
    @Override
    public boolean apply(Person person){
        return person.age > 25;
    }
})
.toSortedImmutableList(Ordering.natural().onResultOf(
    new Function<Person, Integer>(){
        @Override
        public Integer apply(Person person){
            return person.age;
        }
    })
);

Fall 5: java8

Es ist nicht zu leugnen, dass das Sortierteil etwas altmodisch ist. Die Definition der ersten Daten ist ziemlich ärgerlich. Welches ist der beste Weg?

List users = Collections.unmodifiableList(Arrays.asList(
    new HashMap<String, String>(){{put("age","25");put("name","adam");};},
    new HashMap<String, String>(){{put("age","60");put("name","adamo");};},
    new HashMap<String, String>(){{put("age","30");put("name","larry");};}
    )
);
users.stream()
.filter(a -> new Integer(a.get("age")) > 25)
.sorted((o1, o2) -> new Integer(o1.get("age")).compareTo(new Integer(o2.get("age"))))
.collect(Collectors.toList());

Als ich dies unterwegs in einem Objekt aufbewahrte, wurde es ziemlich einfach.

List users= Collections.unmodifiableList(Arrays.asList(
    new HashMap<String, String>(){{put("age","25");put("name","adam");};},
    new HashMap<String, String>(){{put("age","60");put("name","adamo");};},
    new HashMap<String, String>(){{put("age","30");put("name","larry");};}
    )
)
users.stream()
.map(a -> new Person(new Integer(a.get("age")), a.get("name")))
.filter(a -> a.age > 25)
.sorted(comparing(Person::getAge))
.collect(Collectors.toList());

Ochi

Was ist passiert, weil ich nur so ein enges Ding gesehen habe? Es fühlt sich so an, aber zumindest dachte ich, es wäre besser, Java7 wegzuwerfen und auf Java8 zu aktualisieren.

Ich habe es diesmal nicht geschrieben, aber da es Java7 ist, kann ich, wenn ich normal mit dem Prozedurtyp fortfahre, nichts sagen, da der Code mit Nebenwirkungen auch bei dieser Art der Array-Verarbeitung geschrieben wird Es ist sehr attraktiv, Code-Konventionen mit API erstellen zu können.

Recommended Posts

Vergleichen Sie, wie die Verarbeitung für Listen nach Sprache geschrieben wird
So schreiben Sie einen Test für die Verarbeitung mit BigQuery
So schreiben Sie einen ShellScript Bash für Anweisung
[Einführung in Python] So schreiben Sie sich wiederholende Anweisungen mit for-Anweisungen
[Verarbeitung natürlicher Sprache / NLP] Einfache Rückübersetzung durch maschinelle Übersetzung mit Python
XPath-Grundlagen (2) - So schreiben Sie XPath
So beheben Sie mehrere Spalten, die von der Pandas-Gruppe generiert wurden, indem Sie sie zu einer einzelnen verarbeiten
[Python] Versuchen Sie, Ramen-Shops durch Verarbeitung natürlicher Sprache zu klassifizieren
Vergleich der Stapelverarbeitungsgeschwindigkeit nach Sprache
[Für Nicht-Programmierer] Wie man Kaggle läuft
So vergleichen Sie Listen und rufen allgemeine Elemente in einer Liste ab
Wie man nüchtern mit Pandas schreibt
Verarbeitung natürlicher Sprache für vielbeschäftigte Menschen
Wiederverwendung von Flaschen Wie schreibe ich HTML?
Nach Sprache: Reguläre Ausdrücke für Passwörter
Langsame Verwendung der Computersprache 2
Lose Artikel für diejenigen, die mit der Verarbeitung natürlicher Sprache beginnen möchten
100 Sprachverarbeitung klopfen 2020 "für Google Colaboratory"
So schreiben Sie ein Docker-Basis-Image
Fassen Sie mit tf.data.Dataset api zusammen, wie Text (Verarbeitung natürlicher Sprache) vorverarbeitet wird
Wie schreibe ich Django1.9 umweltunabhängig wsgi.py
Wie man die Computersprache langsam benutzt
100 Sprachverarbeitung Knock Kapitel 1 von Python
Vorbereitung zum Starten der Verarbeitung natürlicher Sprache
Hinweise zum Schreiben von require.txt
So trennen Sie den Pipeline-Verarbeitungscode mit Scrapy nach Spider
3. Verarbeitung natürlicher Sprache mit Python 1-2. So erstellen Sie einen Korpus: Aozora Bunko
So vergleichen Sie Zeitreihendaten-Derivative DTW, DTW-
Qiita (1) Wie schreibe ich einen Codenamen?
Wie man optuna einstellt (wie man einen Suchraum schreibt)
100 Sprachverarbeitung Knock-89: Analogie mit additiver Konstitutivität
So erstellen Sie eine * .spec-Datei für pyinstaller.
So schreiben Sie Python-Dokumentkommentare (Docstrings)
[Python] Organisieren der Verwendung für Anweisungen
Entscheiden Sie, wen Sie per Lotterie wählen möchten
So installieren Sie das Windows-Subsystem für Linux
Verwendung der Fingerabdruckauthentifizierung für KDE
Wie schreibe ich Ruby to_s in Python
Zusammenfassung des Schreibens von AWS Lambda
Wie schreibe ich pydoc und mehrzeilige Kommentare
Eintrag, bei dem Python-Anfänger ihr Bestes geben, um nach und nach 100 Sprachprozesse zu beenden
So schreiben Sie einen Komponententest für den URL-Abruf in GAE / P.
[Python] So zeigen Sie die Elemente der Liste nebeneinander an
Ich habe versucht, die Blasensortierung nach Sprache zu programmieren
Eine Einführung in die objektorientierte Programmierung für Anfänger von Anfängern
So verwenden Sie MkDocs zum ersten Mal
So konvertieren Sie von iTunes erworbenes m4a in wav
So erstellen Sie ein Spigot-Plug-In (für Java-Anfänger)
Python unerfahrene Person versucht, 100 Sprachverarbeitung 14-16 zu klopfen
So implementieren Sie die Time-Wait-Verarbeitung mit wxpython
So steuern Sie Multiprozesse ausschließlich in C-Sprache
[Django] So erhalten Sie Daten durch Angabe von SQL.
So installieren Sie Python für Forscher von Pharmaunternehmen
Verwendung von Datenanalysetools für Anfänger
Antwort auf "Offline-Echtzeit, wie man ein F01-Problem schreibt"
So löschen Sie die von Python ausgegebenen Zeichen