input in Liste abspeichern.

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Fl4mer
User
Beiträge: 25
Registriert: Donnerstag 24. November 2016, 19:10

Ich möchte ein Programm schreiben, wo der Benutzer Zahlen nacheinadner eingibt, solange bis er # eingibt. Die Zahlen bis zum # sollen in einer Liste gespeichert werden. Wie mache ich dies? Gibt es ein Befehl den input direkt in einer Liste zu speichern? Danke schonmal im vorraus :D
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@Fl4mer: welche Methoden für Listen kennst Du denn schon? Direkt Speichern geht ja schlecht, da Du noch auf das Endezeichen prüfen mußt.
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
Gibt es ein Befehl den input direkt in einer Liste zu speichern?
Nee, das musst du in 2 Schritten machen. So oder so. Plus natürlich aus dem Grund, den Sirius3 genannt hat.

Gruß, noisefloor
Fl4mer
User
Beiträge: 25
Registriert: Donnerstag 24. November 2016, 19:10

Ich kenne noch nicht so viel in python. Bin ein Anfänger. Weiß aber jetzt doch wie man es löst. Benutzte einfach eine While Schleife und list.append.
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
Benutzte einfach eine While Schleife und list.append.
Klingt schon mal gut.

Vielleicht magst du trotzdem deinen Code hier zeigen? Gerade als Anfänger bekommst du dann sicherlich noch den ein- oder anderen Tipp dazu.

Gruß, noisefloor
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

Man braucht noch map und iter:

Code: Alles auswählen

numbers = list(map(int, iter(input, '#')))
Fl4mer
User
Beiträge: 25
Registriert: Donnerstag 24. November 2016, 19:10

Code: Alles auswählen

digit_lst = []
    while True:
         digit =input('Geben Sie eine Zahl ein und bestätigen sie mit \
Enter. Wenn sie genug Zahlen eingegeben haben, Geben Sie # ein.')
         if digit == '#':
             break
         else:
             digit_lst.append(int(digit))
Fl4mer
User
Beiträge: 25
Registriert: Donnerstag 24. November 2016, 19:10

Mir kam jetzt eine neue Frage auf. Wenn ich eine Liste habe und diese in ein set() verwandle ändern sich die Positionen der Zahlen siehe Bsp.
Wie kann ich dies verhindern ?

Code: Alles auswählen

a = [1, 2, 3, 4, 5, 6, 1, 2, 9, 8]
>>> set(a)
{1, 2, 3, 4, 5, 6, 8, 9}
Ich möchte, dass die Listen Struktur beibehalten wird also eigentlich die Menge so aussähe: {1, 2, 3, 4, 5, 6, 9, 8}.
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@Fl4mer: eine Menge hat keine Reihenfolge.

Code: Alles auswählen

from collections import OrderedDict
numbers = list(OrderedDict.fromkeys(a))
BlackJack

@Fl4mer: Das kannst Du gar nicht verhindern. Mengen haben keine definierte Ordnung. Wenn Du aus einer Liste eine andere Liste erstellen willst, wo keine Elemente doppelt vorkommen, aber die Elemente in der gleichen Reihenfolge stehen, dann musst Du das explizit selbst programmieren. Also die eine Liste durchgehen und Elemente nur dann in der zweiten Liste hinzufügen falls sie noch nicht vorkamen. Dafür kann man dann wieder ein `set` verwenden, um sich zu merken was man schon mal hatte.

Du solltest Dir übrigens zwei Sachen Namen betreffent gleich abgewöhnen: Abkürzungen und konkrete Grunddatentypen im Namen. Also weder `_lst` noch `_list` irgendwo an Namen anhängen.

`digit` beziehungsweise `digit_lst` (oder eben besser `digits`) wäre übrigens auch nur richtig wenn die Zahlen alle nur eine Ziffer lang sind. Was aber nicht sichergestellt wird. Und in dem Fall könnte man sich die Eingabe auch einfacher machen in dem man alle Ziffern in einer Zeichenkette abfragt und die dann aufteilt.
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

oder so:

Code: Alles auswählen

>>> my_list = [1, 2, 3, 1, 2, 9, 8]
>>> no_dublicates = []
>>> for item in my_list:
...     if item not in no_dublicates:
...         no_dublicates.append(item)
... 
>>> no_dublicates
[1, 2, 3, 9, 8]
>>>
Ich hätte ja gedacht, das BlackJack noch eine Lösung auf Basis der itertools raus haut... Kommt vielleicht noch :-)

Gruß, noisefloor
BlackJack

@noisefloor: Da sollte man sich aber im klaren über die Ineffizienz des Algorithmus sein, und das nicht mit grösseren Datenmengen versuchen.

Edit: Ach ja: `duplicates`
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

@BlackJack: War gedanklich wohl bei Dub-Musik ;-)

BTW: wenn man bei Google nach "python list eliminate duplicates" findet man noch eine ganze Reihe Threads mit weiteren Möglichkeiten, das Problem zu lösen. Keine Ahnung, welcher bei großen Datenmengen der effizienteste ist.

Gruß, noisefloor
Antworten