Seite 1 von 1
					
				Ausgabe in Form einer Tabelle
				Verfasst: Montag 20. Mai 2019, 13:04
				von Jankie
				Hey,
ich habe folgende Liste vorliegen:
Code: Alles auswählen
Mittwoch 18:25 False
Montag 17:20 True
Freitag 13:30 False
Montag 17:25 True
Dienstag 16:20 False
Montag 17:20 False
Dienstag 16:30 True
Mittwoch 17:25 False
Donnerstag 19:20 False
 
So soll die Ausgabe aussehen:
Code: Alles auswählen
11:00  12:00  13:00  14:00  15:00
          
06.40  52.30  20.00  18.25  65.21   Montag
80.26  12.63  25.00  09.56  31.21   Dienstag
...
 
  
Oben die Uhrzeiten in einer Reihe nebeneinander und darunter die Prozentanzahl für jeden Tag pro Uhrzeit
  
Ich lese jede Zeile ein und ordne die Werten zwei Listen zu pro Tag. Bei denen True dahinter steht kommen in die liste_true, die anderen in liste_false.
Dann soll jede Uhrzeit die in der Liste vorkommt, oben in der Zeile nur einmal ausgegeben werden. Das mache ich mit 
Code: Alles auswählen
for time in list(set(liste_true + liste_false)):
    print(f"{time:05.2f} ", end= "")
 
    
Dann stehen die alle nebeneinander.
Dann möchte ich den Tag ausgeben und dahinter den Prozentwert aus liste_true.count(time)/(liste_true.count(time)+ liste_false.count(time))*100 für jede Uhrzeit.
Das mit dem berechnen klappt alles schön und gut, allerdings bekomme ich das nicht so schön formatiert und ich müsste für jeden Tag zwei extra Listen erstellen, kann mir bitte jemand helfen?
Code: Alles auswählen
liste_true = [17.20, 18.20, 19.20, 20.20]
liste_false = [17.20, 18.20, 19.20, 20.20, 21.20]
for time in list(set(liste_true + liste_false)):
    print(f"{time:05.2f} ", end= "")
 
			 
			
					
				Re: Ausgabe in Form einer Tabelle
				Verfasst: Montag 20. Mai 2019, 13:15
				von Sirius3
				Ich sehe da verschiedene Minutenzeiten? Du willst also alle Minuten-Einträge pro Stunde accumulieren?
Dann mach genau das.
Statt also die Werte in Listen aufzutrennen, mußt Du zusammengehörige Daten zusammenbehalten und so aufbereiten, wie Du später auf sie zugreifen willst.
Da die Einträge in wilder Reihenfolge zu kommen scheinen, eigenet sich ein Wörterbuch (hier `collections.defaultdict`) am besten, weil es sich automatisch mit den Inputs nacheinander aufbaut.
Der Key ist ein Tuple aus Wochentag und Stunde, der Wert ist jeweils eine Liste, in der Du einfach alle True- und False-Werte speicherst, die Du dazu findest.
Damit ist die Ausgabe ganz einfach: Du gehst in einer doppelten Schleife Montag bis Freitag und 11Uhr bis 19Uhr durch, liest die Liste aus dem Wörterbuch und berechnest daraus die Prozente (`statistics.mean`).
			 
			
					
				Re: Ausgabe in Form einer Tabelle
				Verfasst: Montag 20. Mai 2019, 13:29
				von Jankie
				Die Minutenanzeigen sind verschieden, da die Tabelle nur als Beispiel der Formatierung dienen sollte. Also ich habe es jetzt hinbekommen, dass die Tabelle so dargestellt wird wie ich es möchte. 
Code: Alles auswählen
WOCHENTAGE = {0: "Montag",
              1: "Dienstag",
              2: "Mittwoch",
              3: "Donnerstag",
              4: "Freitag",
              5: "Samstag",
              6: "Sonntag"}
liste_true = [17.20, 18.20, 19.20, 20.20]
liste_false = [17.20, 18.20, 19.20, 20.20, 21.20]
for time in list(set(liste_true + liste_false)):
    print(f"{time:05.2f} ", end= "")
print("\n")    
    
    
for day in list(WOCHENTAGE.values()):
    for time in list(set(liste_true + liste_false)):
        print("{0:05.2f} ".format(liste_true.count(time)/(liste_true.count(time) + liste_false.count(time))*100), end = "")
    print(f"{day}", end = "")
    print()
jetzt muss ich nur noch das hinbekommen, dass ich nicht für jeden Tag zwei extra Listen erzeugen muss. Also soll ich dann ein dict erstellen was z.B. so aussieht (vom Aufbau):
    
Code: Alles auswählen
beispiel = {("Montag", "14.20"): [True, False, False, True, False, ...],
            ("Montag", "15.20"): [False, False, False, True, ...],
            ("Montag", "16.20"): [False, True, True, True, ...]
            ("Dientag", "14.20"): [False, True, True, False, ...]
            ...
            }
und werte das dann mit  statistics.mean aus?
Und die Tabelle hab ich bisschen unglücklich gezeigt. Mit den Werten meiner Datei die ich auswerten soll würde die Tabelle so aussehen (Prozente sind nur dummys)
Code: Alles auswählen
13:30  16:20  16:30  17:20  17:25  18:25  19:20
          
06.40  52.30  20.00  18.25  65.21  66.66  66.66  Montag
80.26  12.63  25.00  09.56  31.21  66.66  66.66  Dienstag
Also jede Uhrzeit die einmal vorkommt soll auf der X-Achse ausgegeben werden. Es sind nicht nur volle Stunden o.Ä.
 
			 
			
					
				Re: Ausgabe in Form einer Tabelle
				Verfasst: Dienstag 21. Mai 2019, 06:57
				von Jankie
				Hey, so richtig bekomme ich das nicht wirklich hin.
Bei mir ist immer nur ein status Wert (True/False) dann dem Tupel von (tag, uhrzeit) zugeordnet.
Code: Alles auswählen
def fill_dict():
    testdict = defaultdict()
    with open(FILENAME) as file:
        for item in file:
            if ' ' in item:
                tag,uhrzeit,status = item.split(' ', 2)
                testdict[(tag, uhrzeit)] = status[:-1]
    print(testdict)    
fill_dict()
Ausgabe:
Code: Alles auswählen
defaultdict(None, {('Montag', '17.30'): 'False', ('Dienstag', '16.30'): 'False',
 ('Mittwoch', '15.30'): 'False', ('Donnerstag', '14.30'): 'False', ('Freitag', '
13.30'): 'False', ('Samstag', '12.30'): 'False', ('Sonntag', '11.30'): 'False',
('Sonntag', '07.30'): 'False'})
Kann mir jemand weiterhelfen oder hat ein gutes Beispiel parat?
#edit:
habe es hinbekommen
Code: Alles auswählen
def fill_dict():
    testdict = defaultdict(list)
    with open(FILENAME) as file:
        for item in file:
            if ' ' in item:
                datum,tag,uhrzeit,status = item.split(' ', 3)
                testdict[(tag, uhrzeit)].append(status[:-1])
    print(testdict) 
 
Code: Alles auswählen
defaultdict(<class 'list'>, {('Montag', '17.30'): ['False', 'True'], ('Dienstag'
, '16.30'): ['True', 'False'], ('Mittwoch', '15.30'): ['True', 'False'], ('Donne
rstag', '14.30'): ['True', 'False'], ('Freitag', '13.30'): ['True', 'False'], ('
Samstag', '12.30'): ['True', 'False'], ('Sonntag', '11.30'): ['True', 'False'],
('Sonntag', '07.30'): ['False']})
Jetzt hängt es nur noch an der Darstellung der Tabelle
 
			 
			
					
				Re: Ausgabe in Form einer Tabelle
				Verfasst: Dienstag 21. Mai 2019, 08:13
				von Jankie
				Sorry für den Doppelpost, aber ich fasse hier noch mal zusammen was ich alles habe und was ich erreichen möchte.
Was ich erreichen möchte ist folgende Darstellung der Werte
Code: Alles auswählen
        Montag  Dienstag  Mittwoch  Donnerstag  Freitag  Samstag  Sonntag
        
07.30   66.66   66.66     66.66     66.66       66.66    66.66    66.66     
11.30   66.66   66.66     66.66     66.66       66.66    66.66    66.66
12.30   66.66   66.66     66.66     66.66       66.66    66.66    66.66
13.30   66.66   66.66     66.66     66.66       66.66    66.66    66.66
14.30   66.66   66.66     66.66     66.66       66.66    66.66    66.66
15.30   66.66   66.66     66.66     66.66       66.66    66.66    66.66
16.30   66.66   66.66     66.66     66.66       66.66    66.66    66.66
17.30   66.66   66.66     66.66     66.66       66.66    66.66    66.66
 
x-Achse: jeder Tag der in der Urpsrungsdatei vorkommt, nur 1x und wenn möglich richtige Reihenfolge(Mo-Fr).
y-Achse: jede Uhrzeit die in der Ursprungsdatei vorkommt, nur 1x und wenn möglich richtige Reihenfolge(früh -> spät)
Die 66.66 sind nur Dummy-Werte, dort soll später das Verhältnis von True/False stehen für jeden Tag für jede Uhrzeit
Was ich bisher habe:
Code: Alles auswählen
def fill_dict():
    testdict = defaultdict(list)
    with open(FILENAME) as file:
        for item in file:
            if ' ' in item:
                datum,tag,uhrzeit,status = item.split(' ', 3)
                if status == "True\n":
                    status = True
                else:
                    status = False
                testdict[(tag, uhrzeit)].append(status)
    return testdict
    
    
testdict = fill_dict()    
for k in testdict.keys():
    print(k[0], k[1])
    print(testdict[k])
    print(statistics.mean(testdict[k]))
Ausgabe von dem was ich habe:
Code: Alles auswählen
Montag 17.30
[False, True]
0.5
Dienstag 16.30
[True, False]
0.5
Mittwoch 15.30
[True, False]
0.5
Donnerstag 14.30
[True, False]
0.5
Freitag 13.30
[True, False]
0.5
Samstag 12.30
[True, False]
0.5
Sonntag 11.30
[True, False]
0.5
Sonntag 07.30
[False]
0
Montag 16.30
[False]
0
 
			 
			
					
				Re: Ausgabe in Form einer Tabelle
				Verfasst: Dienstag 21. Mai 2019, 08:18
				von Sirius3
				`testdict` ist ein schlechter Name für eine Variable, die gar nichts testet. Außerdem sollte kein expliziter Datentyp im Namen vorkommen. `fill_dict` ist ein schlechter Name für eine Funktion, da viel zu allgemein. Es wird ein Wörterbuch gefüllt? Der Leser will doch wissen, mit was es gefüllt wird. `tag` ist eigentlich der Wochentag.
status sollte gleich in den passenden Datentyp umgewandelt werden. Ein encoding sollte immer explizit angegeben werden. Die Mischung von englischen und deutschen Bezeichnern ist verwirrend.
Code: Alles auswählen
def parse_whatever_file(filename):
    weekday_and_time_to_states = defaultdict(list)
    with open(filename, encoding="ASCII") as lines:
        filtered_lines = filter(bool, map(str.split, lines)) # split lines and remove empty ones
        for date, weekday, time, status in filtered_lines:
            weekday_and_time_to_states[weekday, time].append({"True": True, "False": False}[status])
    return weekday_and_time_to_states 
EDIT: Wenn man über Schlüssel und Wert eines Wörterbuches iterieren möchte benutzt man `dict.items`.
Bei Deinem letzten Post fehlt eine Frage. Daraus schließe ich, dass Du noch selbst über das Problem nachdenkst.
 
			 
			
					
				Re: Ausgabe in Form einer Tabelle
				Verfasst: Dienstag 21. Mai 2019, 09:05
				von Jankie
				Habe das erstmal nur testdict genannt, weil ich eine extra Python Datei erstellt habe um nur dieses aufüllen des Dictionarys dort zu testen, also es sind noch keine finalen Namen.
Ich bekomme die Schleifen nicht so hin, dass am Ende eine strukturierte Tabelle ensteht, wie ich es mir vorstelle. Eine Konkrete Frage habe ich da nicht, außer: Wie geht das?
Wenn ich z.B. nur die Tage nebeneinander in einer Zeile ausgeben möchte benutze ich:
Code: Alles auswählen
for k, v in testdict.items():
    print(f"{k[0]} ", end = "")
Allerdings werden so auch doppelte Werte doppelt ausgegeben. Ich weiß nur wie ich aus einer Liste jedes Element nur 1x ausgebe, so funktioniert das aber nicht mit testdict.items()
 
			 
			
					
				Re: Ausgabe in Form einer Tabelle
				Verfasst: Dienstag 21. Mai 2019, 09:51
				von sparrow
				Ich werde leider aus deiner Erklärung nicht ganz schlau, aber was immer geht:
Einen Schritt zurück treten und die Daten vorher so sortieren, wie du sie brauchst. Zeile für Zeile in eine Liste, deren Elemente wiederum die Spalten sind.
Am Ende brauchst du dann nur einmal durch die Liste laufen und die Daten ausgeben.
Optimieren, weil der Code hässlich ist, kann man hinterher noch immer.
Zeig doch mal wie deine Daten jetzt (in entsprechender Datenstruktur im Programm) aussehen und wie sie hinterher angezeigt werden sollen. Keine Platzhalter und bitte alle Berechnungen schon abgeschlossen.
			 
			
					
				Re: Ausgabe in Form einer Tabelle
				Verfasst: Dienstag 21. Mai 2019, 10:17
				von Sirius3
				@Jankie: das habe ich Dir schon im ersten Post geschrieben; Du brauchst zwei verschachtelte Schleifen, eine über die Wochentage und eine über die Uhrzeiten. Dazu mußt Du erst alle Wochentage und Uhrzeiten in Sets sammeln, und sortiert über sie iterieren.
			 
			
					
				Re: Ausgabe in Form einer Tabelle
				Verfasst: Dienstag 21. Mai 2019, 10:18
				von __blackjack__
				@Jankie: Irgendwie hast Du jetzt ”mitten drin” geändert was Du als Ergebnis haben möchtest – also die Tabelle transponiert.  Du könntest/solltest vielleicht auch ein verschachteltes Wörterbuch ins Auge fassen statt Tag und Zeit in einem Schlüssel zusammen zu fassen.
			 
			
					
				Re: Ausgabe in Form einer Tabelle
				Verfasst: Dienstag 21. Mai 2019, 10:44
				von Jankie
				Sirius3 hat geschrieben: Dienstag 21. Mai 2019, 10:17
@Jankie: das habe ich Dir schon im ersten Post geschrieben; Du brauchst zwei verschachtelte Schleifen, eine über die Wochentage und eine über die Uhrzeiten. Dazu mußt Du erst alle Wochentage und Uhrzeiten in Sets sammeln, und sortiert über sie iterieren.
 
Das mit dem Sets erstellen bekomme ich hin, allerdings nicht die verschachtelte Schleife, bei mir gibt er dann für jede Uhrzeit einmal die Tage aus. Er soll aber nur einmal die Tage nebeneinander ausgeben und die Uhrzeiten untereinander. Mit zwei getrennten Schleifen bekomme ich auch das hin, verschachtelt aber leider nicht. Und das mit dem sortiert drüber iterieren verstehe ich auch nicht, soll ich vielleicht vorher das Set wieder in eine Liste umwandeln?
__blackjack__ hat geschrieben: Dienstag 21. Mai 2019, 10:18
@Jankie: Irgendwie hast Du jetzt ”mitten drin” geändert was Du als Ergebnis haben möchtest – also die Tabelle transponiert.  Du könntest/solltest vielleicht auch ein verschachteltes Wörterbuch ins Auge fassen statt Tag und Zeit in einem Schlüssel zusammen zu fassen.
 
Ja ich habe gemerkt, dass ich mehr verschiedene Uhrzeiten als verschiedene Tage habe, da die ausgabe der Uhrzeiten nicht in eine Reihe passt habe ich die Achsen vertauscht.
 
			 
			
					
				Re: Ausgabe in Form einer Tabelle
				Verfasst: Dienstag 21. Mai 2019, 10:49
				von Sirius3
				So funktioniert programmieren. Du überlegst Dir, was Du haben möchtest, teilst das Problem in kleine Teilprobleme auf, und implementierst diese dann.
Du willst alle Zeiten sortiert ausgegeben haben, dann mußt Du erst alle Zeiten ermitteln und diese dann sortieren, z.B. mit `sorted`.
			 
			
					
				Re: Ausgabe in Form einer Tabelle
				Verfasst: Dienstag 21. Mai 2019, 10:58
				von sparrow
				@Jangie: Wie gesagt, zeig reale Daten, so wie sie in deiner Struktur vorliegen, und zeig, wie sie am Ende aussehen in Tabellenform aussehen sollen. Keine Platzhalter oder Dummy-Werte und alle Berechnungen bereits abgeschlossen und in den Daten enthalten.
Denn die Berechnung und die Ausgabe sind zwei unterschiedliche Teilprobleme.
			 
			
					
				Re: Ausgabe in Form einer Tabelle
				Verfasst: Dienstag 21. Mai 2019, 11:18
				von __blackjack__
				Mal ein Versuch mit verschachtelten `defaultdict`\s:
Code: Alles auswählen
#!/usr/bin/env python3
from collections import defaultdict
from statistics import mean, StatisticsError
DAY_NAMES = [
    'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag',
    'Freitag', 'Samstag', 'Sonntag'
]
LINES = '''\
Mittwoch 18:25 False
Montag 17:20 True
Freitag 13:30 False
Montag 17:25 True
Dienstag 16:20 False
Montag 17:20 False
Dienstag 16:30 True
Mittwoch 17:25 False
Donnerstag 19:20 False
'''.splitlines()
def main():
    time2days = defaultdict(lambda: defaultdict(list))
    for line in LINES:
        day_name, time, flag = line.split()
        time2days[time][day_name].append(bool(flag))
    
    column_gap = 2
    time_column_width = 5
    day_column_width = max(map(len, DAY_NAMES))
    print(' ' * (time_column_width + column_gap), end='')
    print(
        (' ' * column_gap).join(
            day_name.rjust(day_column_width)
            for day_name in DAY_NAMES
        )
    )
    for time, day_name2flags in sorted(time2days.items()):
        row = [time.rjust(time_column_width)]
        for day_name in DAY_NAMES:
            try:
                ratio = mean(day_name2flags[day_name])
            except StatisticsError:
                ratio = 0
            row.append('{0:-{1}.2f}'.format(ratio, day_column_width))
        print((' ' * column_gap).join(row))
if __name__ == '__main__':
    main()
 
			 
			
					
				Re: Ausgabe in Form einer Tabelle
				Verfasst: Dienstag 21. Mai 2019, 14:25
				von Jankie
				sparrow hat geschrieben: Dienstag 21. Mai 2019, 10:58
@Jangie: Wie gesagt, zeig reale Daten, so wie sie in deiner Struktur vorliegen, und zeig, wie sie am Ende aussehen in Tabellenform aussehen sollen. Keine Platzhalter oder Dummy-Werte und alle Berechnungen bereits abgeschlossen und in den Daten enthalten.
Denn die Berechnung und die Ausgabe sind zwei unterschiedliche Teilprobleme.
 
Ich habe folgende Daten in einer .txt vorliegen:
Code: Alles auswählen
Montag 17.30 True
Dienstag 16.30 True
Mittwoch 15.30 True
Donnerstag 14.30 True
Freitag 13.30 True
Samstag 12.30 True
Sonntag 11.30 True
Sonntag 17.30 False
Samstag 16.30 False
Freitag 15.30 False
Donnerstag 14.30 False
Mittwoch 13.30 False
Dienstag 12.30 False
Montag 11.30 False
Donnerstag 16.30 False
Montag 17.30 False
Dienstag 16.30 False
Mittwoch 15.30 False
Donnerstag 14.30 False
Freitag 13.30 False
Samstag 12.30 False
Sonntag 11.30 False
Sonntag 17.30 True
Samstag 16.30 True
Freitag 15.30 True
Donnerstag 14.30 True
Mittwoch 13.30 True
Dienstag 12.30 True
Montag 11.30 True
Donnerstag 16.30 True
Samstag 11.25 True
Samstag 11.25 True
diese lese ich in ein Dictionary ein, eingelesen sieht es folgendermaßen aus:
Code: Alles auswählen
{('Montag', '17.30'): [True, False], ('Dienstag', '1
6.30'): [True, False], ('Mittwoch', '15.30'): [True, False], ('Donnerstag', '14.
30'): [True, False, False, True], ('Freitag', '13.30'): [True, False], ('Samstag
', '12.30'): [True, False], ('Sonntag', '11.30'): [True, False], ('Sonntag', '17
.30'): [False, True], ('Samstag', '16.30'): [False, True], ('Freitag', '15.30'):
 [False, True], ('Mittwoch', '13.30'): [False, True], ('Dienstag', '12.30'): [Fa
lse, True], ('Montag', '11.30'): [False, True], ('Donnerstag', '16.30'): [False,
 True], ('Samstag', '11.25'): [True,True]})
Meine Ausgabe soll folgendermaßen aussehen:
Code: Alles auswählen
Montag Dienstag Mittwoch Donnerstag Freitag Samstag Sonntag  
0      0        0        0          0       100     0        11.25
50     0        0        0          0       0       50       11.30
0      50       0        0          0       50      0        12.30
0      0        50       0          50      0       0        13.30
0      0        0        50         0       0       0        14.30
0      0        50       0          50      0       0        15.30
0      50       0        50         0       50      0        16.30
50     0        0        0          0       0       50       17.30
Auf der X-Achse sind alle Tage die in der .txt vorkommen nebeneinander dargestellt. Das bekomme ich hin mit 
Code: Alles auswählen
WOCHENTAGE = {0: "Montag",
             1: "Dienstag",
              2: "Mittwoch",
              3: "Donnerstag",
              4: "Freitag",
              5: "Samstag",
              6: "Sonntag"}
set_for_day = set()
for k, v in testdict.items():
    set_for_day.add(k[0])
order = list(WOCHENTAGE.values())    
for day in sorted(set_for_day, key = lambda x: order.index(x)):
    print(f"{day} ", end ="")
(Das dict WOCHENTAGE habe ich drin, weil ich damit über das Datum den Wochentag ermittle)
Auf der Y-Achse sind die Uhrzeiten die in der .txt vorkommen (es kann auch mal 11:33 Uhr oder 18:48 Uhr sein , also es wird nicht in festen Abständen gemessen) untereinander dargestellt.
In der Zeile 11:30 und der Spalte Montag steht dann 50, weil einmal True und ein mal False vorkommt, also das Verhältnis im Prozenwert (im Vergleich dazu Zeile 11.25 und Spalte Samstag 100, weil dort beide werte True sind, es sind aber nicht immer nur zwei Werte (True/False) sonder eine varaible Anzahl von Werten möglich.
Was ich bis jetzt habe ist, dass ich die Wochentage in der X-Achse nebeneinander ausgeben kann (siehe oben)
Die Uhrzeiten gebe ich untereinander aus mit:
Code: Alles auswählen
set_for_time = set()
for k, v in testdict.items():
    set_for_time.add(k[1])
for times in sorted(set_for_time):
    print(f"                                                            {times}")
 
			 
			
					
				Re: Ausgabe in Form einer Tabelle
				Verfasst: Dienstag 21. Mai 2019, 14:47
				von __blackjack__
				Mit den neuen Beispieldaten und etwas angepasst:
Code: Alles auswählen
#!/usr/bin/env python3
from collections import defaultdict
from statistics import mean, StatisticsError
DAY_NAMES = [
    'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag',
    'Freitag', 'Samstag', 'Sonntag'
]
LINES = '''\
Montag 17.30 True
Dienstag 16.30 True
Mittwoch 15.30 True
Donnerstag 14.30 True
Freitag 13.30 True
Samstag 12.30 True
Sonntag 11.30 True
Sonntag 17.30 False
Samstag 16.30 False
Freitag 15.30 False
Donnerstag 14.30 False
Mittwoch 13.30 False
Dienstag 12.30 False
Montag 11.30 False
Donnerstag 16.30 False
Montag 17.30 False
Dienstag 16.30 False
Mittwoch 15.30 False
Donnerstag 14.30 False
Freitag 13.30 False
Samstag 12.30 False
Sonntag 11.30 False
Sonntag 17.30 True
Samstag 16.30 True
Freitag 15.30 True
Donnerstag 14.30 True
Mittwoch 13.30 True
Dienstag 12.30 True
Montag 11.30 True
Donnerstag 16.30 True
Samstag 11.25 True
Samstag 11.25 True
'''.splitlines()
def main():
    time2days = defaultdict(lambda: defaultdict(list))
    for line in LINES:
        day_name, time, flag = line.split()
        time2days[time][day_name].append(flag == 'True')
    
    column_gap = 2
    time_column_width = 5
    day_column_width = max(map(len, DAY_NAMES))
    print(' ' * (time_column_width + column_gap), end='')
    print(
        (' ' * column_gap).join(
            day_name.rjust(day_column_width)
            for day_name in DAY_NAMES
        )
    )
    for time, day_name2flags in sorted(time2days.items()):
        row = [time.rjust(time_column_width)]
        for day_name in DAY_NAMES:
            try:
                ratio = mean(day_name2flags[day_name])
            except StatisticsError:
                ratio = 0
            row.append('{0:-{1}.2f}'.format(ratio, day_column_width))
        print((' ' * column_gap).join(row))
if __name__ == '__main__':
    main()
Ausgabe:
Code: Alles auswählen
           Montag    Dienstag    Mittwoch  Donnerstag     Freitag     Samstag     Sonntag
11.25        0.00        0.00        0.00        0.00        0.00        1.00        0.00
11.30        0.50        0.00        0.00        0.00        0.00        0.00        0.50
12.30        0.00        0.50        0.00        0.00        0.00        0.50        0.00
13.30        0.00        0.00        0.50        0.00        0.50        0.00        0.00
14.30        0.00        0.00        0.00        0.50        0.00        0.00        0.00
15.30        0.00        0.00        0.50        0.00        0.50        0.00        0.00
16.30        0.00        0.50        0.00        0.50        0.00        0.50        0.00
17.30        0.50        0.00        0.00        0.00        0.00        0.00        0.50
 
			 
			
					
				Re: Ausgabe in Form einer Tabelle
				Verfasst: Dienstag 21. Mai 2019, 15:02
				von sparrow
				1x True für (Tag + Zeit) = 100
1x True 1x False für (Tag + Zeit) = 50
Kann es auch folgendes geben:
1x False für (Tag + Zeit) = ?
4x True 1x False für (Tag + Zeit) = ?
			 
			
					
				Re: Ausgabe in Form einer Tabelle
				Verfasst: Dienstag 21. Mai 2019, 15:13
				von Jankie
				Vielen Dank an  __blackjack__, ich schau mal was ich da für Infos raus ziehen kann um das in mein Programm einzubinden.
@sparrow:
Ja genau, es kann 4x True, 2x False oder 1x True oder 2x False oder 34x False und 1x True (Tag+Zeit) vorkommen. Wenn nur True da steht dann sollte 100 rauskommen, wenn nur False da steht dann 0.