@Tombery: Für mich macht die Beschreibung „eine neue Liste erzeugen in der alle Maximalwerte, maximaloft vorkommen“ keinen Sinn. Es kann nur einen Maximalwert geben. Der Code mach auch keinen Sinn. Und das ist sicher nicht der Code den Du ausführst bei dem eine leere Liste ausgegeben wird, denn weder `P1` noch `Aus` (beides besch…eidene Namen) sind am Ende leer. Also was führst Du *tatsächlich* aus, und wie und was gibst Du am Ende aus, denn in dem gezeigten Code wird gar nichts ausgegeben.
Da sich die Obergrenze, auf die in der ``while``-Bedingung geprüft wird, nicht ändert, weil sich `P1` in der Schleife nicht ändert und sich damit auch die Ergebnisse von ``max(P1)`` und auch ``P1.count(max(P1))`` immer gleich bleiben, ist das keine ``while`` sondern eine ``for``-Schleife:
Code: Alles auswählen
for k in range(P1.count(max(P1)) + 1):
Aus = [max(P1)]
Aus.append(Aus)
Da `Aus` aber in jedem Schleifendurchlauf einen neuen Wert zugewiesen bekommt, der nicht vom alten Wert von `Aus` abhängig ist, macht die ganze Schleife überhaupt keinen Sinn. Das kann man auch ohne Schleife schreiben, ohne das sich am Ergebnis etwas ändert:
Das gibt genau das gleiche Ergebnis wie Deine fünf Zeilen Code mit der ``while``-Schleife. Nur das die im Verhältnis deutlich mehr Rechenzeit verbrät.
Kann es sein, dass Du so etwas hier suchst?
Code: Alles auswählen
#!/usr/bin/env python3
def main():
values = [20, 20, 20, 20, 20, 12, 4, 5, 6, 3, 3, 2, 4]
max_value = max(values)
result = [value for value in values if value == max_value]
print(result)
if __name__ == '__main__':
main()
Oder Alternativ:
Code: Alles auswählen
#!/usr/bin/env python3
def main():
values = [20, 20, 20, 20, 20, 12, 4, 5, 6, 3, 3, 2, 4]
max_value = max(values)
result = [max_value] * values.count(max_value)
print(result)
if __name__ == '__main__':
main()
Das ist wahrscheinlich etwas schneller, dafür hat man am Ende den selben Wert statt alle Werte mit dem gleichen Wert, die aber durchaus verschiedene Typen haben können. Kommt halt darauf an was man will/braucht.