ich möchte einen etwas anderen Weg gehen, um die Zeilen einer Tabelle zu füllen. Und zwar berechne ich den Anteil der einzelnen Zellen an der gesamten Tabellenbreite aufrund von zugeteilten Hierarchiestufen.
Dabei gelten folgende Regeln:
- die Stufen sind eine beliebige Folge von ganzen Zahlen
- ein Objekt der nächsthöheren Stufe darf nie kleiner sein als das Objekt mit der niedrigeren Stufe
- am Ende muss die komplette Tabellenbreite (100%) gefüllt sein
Zunächst ermittle ich von einer Liste mit "Stufenobjekten" in beliebiger Reihenfolge die Hierarchie:
Code: Alles auswählen
In [1]: def get_hierarchy(items):
...: return sorted(((item, items.count(item)) for item in set(items)), reverse=True)
...:
In [2]: get_hierarchy([1,4,4,5,6,3,4,2,1,1,3])
Out[2]: [(6, 1), (5, 1), (4, 3), (3, 2), (2, 1), (1, 3)]
Und jetzt war mein Gedanke, pro Stufe die gesamte (restliche) Tabellenbreite durch die Anzahl der Vorkommnisse + 1 zu rechnen. Der gefundene Anteil wird der Stufe in einem Dictionary zugeschrieben und das zusätzliche Vorkommniss ist der Rest für die übrigen Stufen. Also:
Code: Alles auswählen
In [3]: width = 100.0
In [4]: relations = {}
In [5]: for level, occurrance in [(6, 1), (5, 1), (4, 3), (3, 2), (2, 1), (1, 3)]:
...: width /= occurrance + 1
...: relations[level] = width
...:
...:
In [6]: relations
Out[6]:
{1: 0.26041666666666669,
2: 1.0416666666666667,
3: 2.0833333333333335,
4: 6.25,
5: 25.0,
6: 50.0}
Eigentlich möchte ich halt auch meine eigenen Mathezellen trimmen und Python in dieser Hinsicht besser kennenlernen, da ich diesen Bereich bisher eher gemieden habe. Falls es also Verbesserungsvorschläge gibt, dann her damit.