Seite 1 von 1

input in Liste abspeichern.

Verfasst: Donnerstag 24. November 2016, 19:15
von Fl4mer
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

Re: input in Liste abspeichern.

Verfasst: Donnerstag 24. November 2016, 19:25
von Sirius3
@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.

Re: input in Liste abspeichern.

Verfasst: Donnerstag 24. November 2016, 19:28
von noisefloor
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

Re: input in Liste abspeichern.

Verfasst: Donnerstag 24. November 2016, 19:54
von Fl4mer
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.

Re: input in Liste abspeichern.

Verfasst: Donnerstag 24. November 2016, 19:59
von noisefloor
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

Re: input in Liste abspeichern.

Verfasst: Donnerstag 24. November 2016, 20:00
von Sirius3
Man braucht noch map und iter:

Code: Alles auswählen

numbers = list(map(int, iter(input, '#')))

Re: input in Liste abspeichern.

Verfasst: Donnerstag 24. November 2016, 20:13
von Fl4mer

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))

Re: input in Liste abspeichern.

Verfasst: Donnerstag 24. November 2016, 20:28
von Fl4mer
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}.

Re: input in Liste abspeichern.

Verfasst: Donnerstag 24. November 2016, 20:42
von Sirius3
@Fl4mer: eine Menge hat keine Reihenfolge.

Code: Alles auswählen

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

Re: input in Liste abspeichern.

Verfasst: Donnerstag 24. November 2016, 20:47
von 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.

Re: input in Liste abspeichern.

Verfasst: Donnerstag 24. November 2016, 20:50
von noisefloor
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

Re: input in Liste abspeichern.

Verfasst: Donnerstag 24. November 2016, 20:58
von 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`

Re: input in Liste abspeichern.

Verfasst: Donnerstag 24. November 2016, 21:45
von noisefloor
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