Sortieren Iterabler in Python (Sortieren Iterabler in Python), lesson, Seite 724586
https://www.purl.org/stefan_ram/pub/sortieren_python (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
Python-Kurs

Sortieren in Python 

Der Argumentwert der Funktion ›sorted‹ muß ein Iterables sein.

Die Funktion ›sorted‹ ergibt eine Liste mit den in aufsteigender Reihenfolge sortierten Werten ihres Argumentobjekts.

Konsolenprotokoll
sorted
<built-in function sorted>
sorted( dir() )
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__']
Konsolenprotokoll
range( 10 )
range(0, 10)
sorted( _ )
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
sorted( range( 10 ))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Die gegebenen Beispiele sind nicht ganz überzeugen, da hier die Argumentobjekte bereits sortiert sind. Da eine str-Zeichenfolge ebenfalls iterabel  ist, können wir sie als Beispiel für eine echte  Sortierung heranziehen.

Auswertung
"beispielsweise"
'beispielsweise'
sorted( _ )
['b', 'e', 'e', 'e', 'e', 'i', 'i', 'i', 'l', 'p', 's', 's', 's', 'w']
sorted( "beispielsweise" )
['b', 'e', 'e', 'e', 'e', 'i', 'i', 'i', 'l', 'p', 's', 's', 's', 'w']
Konsolenprotokoll
sorted( Counter( "beispielsweise" ))
['b', 'e', 'i', 'l', 'p', 's', 'w']
sorted( Counter( "abc" ))== sorted( Counter( "acbb" ))
True

Übersicht Iterable  und Aufrufbare 

Iteratoren (und damit auch Iterable)
Ergebnisse von »enumerate«

from multiprocessing.pool import job_counter
job_counter

from sys import stdin
stdin

Iterable
alle Iteratoren
str-Objekte (»"abc"«)
list-Objekte (»dir()«)
tuple-Objekte (»tuple()«)
from itertools import count
count()
range-Ergebnisse
Counter-Objekte
Aufrufbare, die Iteratoren akzeptieren
»next«
Aufrufbare, die Iterable akzeptieren
»iter«
»tuple«
»sum« (nur Iterable, die Zahlen  liefern)
»min«
»max«
»sorted«
»Counter« (nach »from collections import Counter«)
str.join‹ (d.h. die join-Methode eines str-Objektes)

?   Übungsfrage

Jemand möchte das Ergebnis von »dir()« mischen, also die Reihenfolge der Einträge verwürfeln. Er findet dazu die Funktion »shuffle« im Modul »random« und gibt die folgenden Kommandos ein.

Konsoleneingabe

list_ = dir()

print( "list_ =", list_ )

list_ = ['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__']

from random import shuffle

print( shuffle( list_ ))

None

Es ergibt sich die Ausgabe »None«. Tatsächlich hatte der Programmierer aber eher etwas wie die folgenden Ausgabe erwartet.

Erwartete Ausgabe
['__name__', '__builtins__', '__loader__', '__spec__', '__doc__', '__package__', '__annotations__']

Was muß der Programmierer schreiben, um solch eine Ausgabe zu sehen?

?   Übungsfrage

Jemand möchte die Schriftzeichen des Wortes „beispielsweise“ sortieren. Er findet dazu die Funktion »sorted« und gibt die folgenden Kommandos ein.

Konsoleneingabe

list_ = list( 'beispielsweise' )

print( list_ )

['b', 'e', 'i', 's', 'p', 'i', 'e', 'l', 's', 'w', 'e', 'i', 's', 'e']
sorted( list_ )
['b', 'e', 'e', 'e', 'e', 'i', 'i', 'i', 'l', 'p', 's', 's', 's', 'w']
print( list_ )
['b', 'e', 'i', 's', 'p', 'i', 'e', 'l', 's', 'w', 'e', 'i', 's', 'e']

Die letzte Ausgabe zeigt, daß die Liste »list_« anscheinend gar nicht richt sortiert wurde.

Was muß der Programmierer schreiben, um die Liste »list_« wirklich zu sortieren?

Übungsaufgaben

/   Übungsaufgabe

Sortieren Sie durch Eingabe von Python-Anweisungen die unten als Zeichenfolgenliteral angegebene Liste von Wörtern alphabetisch.

Wortliste gegeben durch ein Zeichenfolgenliteral
"Subjekt Deklination Morphem Verb Valenz Partizip Infinitiv"
gewünschtes Ergebnis
'Deklination Infinitiv Morphem Partizip Subjekt Valenz Verb'

/   Übungsaufgabe

Schreiben Sie eine Funktion ›sort‹, die eine als Zeichenfolge gegebene Liste leerzeichengetrennter Wörtern alphabetisch sortiert.

gewünschtes Verhalten der Funktion
sort( "Dendrit Neurit Axon Soma Vakuole ATP Depolarisation Anion Tonoplast" )
'ATP Anion Axon Dendrit Depolarisation Neurit Soma Tonoplast Vakuole'

/   Übungsaufgabe *

Ermöglichen Sie es dem Bediener Ihres Programms, Zeilen einzugeben. Die Eingabe kann mit Strg-Z (beziehungsweise Strg-D unter Linux ) beendet werden. Die Zeilen sollen dann alphabetisch (lexikographisch) sortiert ausgegeben werden.

(Dabei wird nicht verlangt, daß die Zeilen in einer bestimmten Formatierung, wie „untereinander“, ausgegeben werden.)

 

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram724586 stefan_ram:724586 Sortieren Iterabler in Python Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd724586, slrprddef724586, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/sortieren_python