Seite 1 von 1
Ein paar Fragen zu Dictionarys
Verfasst: Freitag 19. Februar 2010, 18:58
von heiliga horsd
Hallo, ich habe ein paar Fragen zu Dictionarys, und zwar:
a) Wie kann ich überprüfen, ob bestimmte Werte genau ein mal in einem Dictionary vorkommen?
b) Wie kann ich die Werte innerhalb des dicts vertauschen?
Die Anzahl der einträge ist immer bekannt und konstant (9)
Danke für Antworten,
Lg HH
Verfasst: Freitag 19. Februar 2010, 19:04
von Dav1d
1. Es gibt immer nur einen Key!
2. Ein normales dict kann man nicht ordnen
naja fast
Verfasst: Freitag 19. Februar 2010, 19:13
von heiliga horsd
Naja, es sieht so aus: Ich habe mir überlegt, man könnte ja mit Python ein Sudoku sicherlich recht schnell per Brute Force lösen. Damit ich jedes Feld einzeln ansprechen kann, würde ich ein Dicitionary hernehmen, aber es stehen ja bei einem Sudoku die Werte bekanntermaßen nicht geordnet da, daher die Frage des vertauschens. Und in einer Reihe darf ja 1-9 auch nur einmal vorkommen...
Verfasst: Freitag 19. Februar 2010, 19:20
von Panke
Für ein Sudoku nimm einfach zweidimensionale Listen. Da ist der Zugriff per Index O(1) oder einfach nur eine Liste und rechne die Indizes um.
Verfasst: Freitag 19. Februar 2010, 19:24
von heiliga horsd
Das wäre auch eine Möglichkeit, daran hab ich gar nicht gedacht, danke.
Aber wie stelle ich sicher, dass jeder Wert bloß einmal da ist?
Per
Kann ich ja schauen, ob ein Wert vorhanden ist, aber wie oft sagt mir das nicht...
Verfasst: Freitag 19. Februar 2010, 19:26
von Panke
Indem Du per Hand guckst, ob etwas doppelt vorkommt.
Verfasst: Freitag 19. Februar 2010, 19:27
von heiliga horsd
Gibts da denn keine "automatische" Möglichkeit?
Verfasst: Freitag 19. Februar 2010, 19:33
von Panke
Nein. Aber das erste Feld links oben bekommst du beispielsweise so als Liste. Schauen wieviele doppelt sind, sollte dann aber echt nicht mehr schwierig sein.
Code: Alles auswählen
liste = [zwei_d_feld[x][y] for x in range(3) for y in range(3)]
Verfasst: Freitag 19. Februar 2010, 19:50
von BlackJack
Man könnte zusätzlich pro Reihe, Spalte, und 3x3-Kästchen je ein `set()` verwalten, wo man die Zahlen "abstreicht", die schon verwendet wurden. Die Schnittmenge für ein 1x1-Kästchen ergibt dann die Zahlen, die man da noch reinschreiben darf. Einfach mal im Forum suchen, so eine Lösung habe ich hier irgendwo mal gepostet.
Verfasst: Freitag 19. Februar 2010, 19:50
von heiliga horsd
@Panke: Tut mir Leid, aber den Code bzw. was du meinst versteh ich grad überhaupt nicht... könntest du das etwas ausführen?
Außerdem funktioniert der Code bei mir nicht :/
Trotzdem Danke für deine Bemühungen!
@Blackjack: OK, ich werd mal die Forensuche befragen! Auch dir herzlichen Dank!
Lg HH
Verfasst: Freitag 19. Februar 2010, 23:03
von snafu
heiliga horsd hat geschrieben:Per
Kann ich ja schauen, ob ein Wert vorhanden ist, aber wie oft sagt mir das nicht...
Code: Alles auswählen
>>> mylist = [1,2,3,4,5,1,1,1,2,3]
>>> mylist.count(1)
4
Verfasst: Samstag 20. Februar 2010, 11:17
von Panke
Mein Code verwendet eine
List Comprehension. Wenn er bei Dir nicht funktioniert, solltest Du mindestens die Fehlermeldung mit angeben, um nachzuvollziehen, warum das so ist. Ich vermute mal, du hast einfach keine entsprechende Liste an den Namen zwei_d_feld gebunden.
Wieder eine List Comprehension. Lies Dir den Teil der Anleitung durch, auf den ich oben verwiesen habe. Falls Du dazu Fragen hast, stelle sie einem gesonderten Thema.
Verfasst: Samstag 20. Februar 2010, 13:53
von heiliga horsd
@Panke: Danke für den Link, ja in der tTat hat bloß die 2d-Liste gefehlt. Danke dir!
@snafu: Danke für den Hinweis!! Jedoch ist mir aufgefallen, dass das nur etwas bei einer eindimensionalen Liste bringt - gibts da auch was für mehrdimensionale?
Verfasst: Samstag 20. Februar 2010, 14:04
von HWK
Code: Alles auswählen
>>> mylist = [[1,2,3,4,5,1,1,1,2,3],[2,3,4,5,1,7,8,1,2,1]]
>>> sum(x.count(1) for x in mylist)
7
MfG
HWK[/code]
Verfasst: Samstag 20. Februar 2010, 14:32
von heiliga horsd
Funktioniert einwandfrei, Vielen Vielen Dank!