Dict Values verändern

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
anymagical
User
Beiträge: 33
Registriert: Montag 2. April 2012, 15:34

Servus,

ich habe folgendes Dict:

Code: Alles auswählen

'A': '1', 'C': '3', 'B': '231'}
Da A=1 und C=3 ist würde für B nur noch der Wert 2 bleiben.
Ist es möglich die Werte von A und C und aus B zu löschen damit B erkannt wird?

Ich habe in etwa an dict.values() gedacht jede Zahl von B in eine Liste zu schreiben und die Zahlen welchen in dem dict gefunden werden daraus löschen und dann wieder neu in B zu schreiben. Scheint mir aber etwas umständlich zu sein. Gibt es vielleicht bessere Methoden das umzusetzen?

Gruß
Anymagical
deets

Das sind die falschen Datenstrukturen wuerde ich mal behaupten. Statt strings waeren sets fuer die values besser. Aber ich frage mich eh, was du da machen willst - warum zB sind A und C priorisiert vor B? Wenn man B zuerst betrachet, fliegen dann nicht A & B komplett raus?

Versuch uns lieber mal zu erklaeren, was du da machen willst.
anymagical
User
Beiträge: 33
Registriert: Montag 2. April 2012, 15:34

Sudoku

von A1 - I9 hat jedes Feld einen bestimmten Wert. Manche Felder haben Anfangs ja noch mehrere Möglichkeiten. Nehmen wir an A1 wäre 3 dann könnte kein weiteres Feld in der Reihe A und Spalte 1 sowie das obere linke Rechteck mehr den Wert 3 enthalten. Diesen Wert wollte ich aus den restlichen values löschen.

Das ganze sollte natürlich geprüft werden und nur falls len(dict.values()) == 1 stattfinden.

Gruß
Anymagical

Code: Alles auswählen

{'I6': '123456789', 'H9': '123456789', 'I2': '123456789', 'E8': '123456789', 'H3': '123456789', 'H7': '123456789', 'I7': '123456789', 'I4': '123456789', 'H5': '1', 'F9': '123456789', 'G7': '123456789', 'G6': '123456789', 'G5': '123456789', 'E1': '123456789', 'G3': '123456789', 'G2': '123456789', 'G1': '6', 'I1': '7', 'C8': '123456789', 'I3': '123456789', 'E5': '123456789', 'I5': '3', 'C9': '123456789', 'G9': '123456789', 'G8': '2', 'A1': '123456789', 'A3': '123456789', 'A2': '123456789', 'A5': '123456789', 'A4': '123456789', 'A7': '4', 'A6': '123456789', 'C3': '123456789', 'C2': '123456789', 'C1': '123456789', 'E6': '123456789', 'C7': '123456789', 'C6': '7', 'C5': '123456789', 'C4': '6', 'I9': '123456789', 'D8': '6', 'I8': '123456789', 'E4': '123456789', 'D9': '123456789', 'H8': '123456789', 'F6': '123456789', 'A9': '1', 'G4': '123456789', 'A8': '123456789', 'E7': '3', 'E3': '123456789', 'F1': '123456789', 'F2': '1', 'F3': '123456789', 'F4': '123456789', 'F5': '123456789', 'E2': '4', 'F7': '123456789', 'F8': '123456789', 'D2': '123456789', 'H1': '123456789', 'H6': '123456789', 'H2': '5', 'H4': '123456789', 'D3': '123456789', 'B4': '2', 'B5': '123456789', 'B6': '123456789', 'B7': '123456789', 'E9': '123456789', 'B1': '8', 'B2': '123456789', 'B3': '123456789', 'D6': '123456789', 'D7': '123456789', 'D4': '8', 'D5': '123456789', 'B8': '123456789', 'B9': '123456789', 'D1': '123456789'}
deets

Ah, ok. Wie gesagt, deine Datenstruktur ist ungeeignet. Jedes Feld hat ein Set mit den Zahlen 1 - 9 drin, und alle 81 Felder sind in einer langen Liste. Und dann hast du 27 Listen mit Feldindizes fuer die 27 9er-Gruppen. Die baust du programmatisch auf. Fuer die horizontalen und vertikalen Zeilen/Spalten ist das besonders einfach, die 9 3x3 Felder sollten aber auch klappen. Zur Not schreibst du das per Hand hin.

Und dann kannst du zB auf jeder Flaeche eine Menge bilden aus all den 1-stelligen Feldern, und ziehst die von der Mengen der mehrstelligen Felder ab.

Code: Alles auswählen

a = set([1])
b = set([2])
c = set(xrange(1, 10))

c -= a | b
print c
anymagical
User
Beiträge: 33
Registriert: Montag 2. April 2012, 15:34

Ich habe 2 Listen 1 in welche A1-i9 gespeichert ist und 1 in welcher das Sudoku gespeichert ist. Dies bin ich folgender maßen angegangen:

Code: Alles auswählen

table=dict(zip(list_1,list_2))
Danach:

Code: Alles auswählen

digits="123456789"
for char in list_1:
    if table[char]==".":
        table[char]=digits
    else:
        continue
Also einfach statt des dict() ein set() benutzen.

Ich habe daran gedacht das jetzt nach und nach durch entfernen der Möglichen das Sudoku gelöst wird.

Grüße
Anymagical
BlackJack

Mal so als Hinweis: Sudokus waren hier schon öfter Thema. Das erste mal das ich mich dran erinnern kann hier: http://www.python-forum.de/viewtopic.php?f=9&t=3378
Antworten