Matroids Matheplanet Forum Index
Moderiert von matph
Informatik » Programmieren » Python: Datentyp für Triple aus Minuend, Subtrahend und Differenz
Autor
Schule Python: Datentyp für Triple aus Minuend, Subtrahend und Differenz
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2489
  Themenstart: 2021-07-24

Hallo, hab Differenzen gebildet und in einer Liste abgespeichert. Jetzt merke ich, daß ich bei der jeweiligen Differenz auch zugriff auf Minuend und Subtrahend haben muss. Was für ein Datentyp ist dazu geeignet. Ich bin auf der Suche nach Differenzen, mit unterschiedlichen Ausgangsdaten. Beispiel: 24-13=11 21-10=11 24-7=17 28-11=17 Frage: Suche alle Differenzen, die "Ausgangszahlendifferent" sind, deren Ausgangszahlen nur 1 x im Differenzenpool vorkommen. richtige Antwort: 1: 28-11=17 2: 21-10=11 Welchen Datentyp verwendet man da, um Minuend von Subtrahend getrennt an die Differenz zu koppeln? Auch Dict, und dann Value 1 und Value 2 ???


   Profil
Bilbo
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 03.01.2005
Mitteilungen: 2028
  Beitrag No.1, eingetragen 2021-07-25

Hallo Bekell, da es ja immer um genau drei "Bestandteile" geht, würde sich ein dreielementiges Tuple gut eignen. Oder falls Du vorhast, die Datencontainer nachträglich zu ändern, eine dreielementige Liste. Viele Grüße Thorsten


   Profil
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2489
  Beitrag No.2, vom Themenstarter, eingetragen 2021-07-25

Warum ist Entfernungen1 leer? In Zeile 109 wird die 3-elementige Liste "Entfernung" doch erst gelöscht, nachdem die 3 Werte in Zeile 108 an die Liste "Entfernungen1" übergeben wurden. Das versteh ich nicht.... \sourceon Python \numberson import openpyxl from openpyxl import Workbook from openpyxl.styles import Color, PatternFill, Font, Border from openpyxl.styles import colors from openpyxl.cell import Cell from openpyxl.utils import get_column_letter from sympy.ntheory import isprime Länge=29 # länge PZkleinerlL=[] # enthält PZkleinern mydic={} # enthält die Version Stelle als Key und Belegung (liste) als value version={} nr=0 N23=0 listofvalues=[] str0="" str1="" str2="" str3="" str4="" Zahlen=[] Min=[] Sub=[] Diff=[] li=[] FreieZellen=[] BelegteZellen=[] GeradeKeys=[] UnGeradeKeys=[] Entfernungen1=[] Entfernungen2=[] Entfernung=[] leuchtendgrünFill = PatternFill(start_color="FF00FF00", end_color="FF00FF00", fill_type="solid") yellowFill = PatternFill(start_color="00FFFF00", end_color="00FFFF00", fill_type="solid") redFill = PatternFill(start_color="FFFF0000", end_color="FFFF0000", fill_type="solid") wb = Workbook() ws=wb.active for x in range(1,Länge+1): Zahlen.append(x) ws.column_dimensions[get_column_letter(x)].width = 5 # nich so einfach ws.append(["Version/Zelle"]+Zahlen) #Kopfzeile ws.column_dimensions['A'].width = 11 for zahla in range(1,4): for zahlb in range(1,6): for zahlc in range(1,8): for key in range(1,Länge+1): # Hier macht er in alle keys eine 0 mydic[key]=[] for key in mydic: if key%3==zahla%3: mydic[key].append(3)# hier macht er die 3-en in die Valueliste if key%5==zahlb%5: mydic[key].append(5)# hier macht er die 5-en in die Valueliste if key%7==zahlc%7: mydic[key].append(7)# hier macht er die 7-en in die Valueliste #print("keyausfor",key,"keyausmydic",mydic.get(key)) li=mydic.get(key) # Version ohne Klammern in Excel str0="" for xi in li: str0=str0+str(xi)+"," str1=str(zahla)#Version str2=str(zahlb)#Version str3=str(zahlc)#Version str4=str1+str2+str3 #Versionsstring ws.cell(nr+2,1,str4) # die +2 sind, dmit die Kopfzeile nicht überschrieben wird if len(li)==1: # Färbeblock ws.cell(nr+2,key+1).fill = yellowFill if len(li)==2: ws.cell(nr+2,key+1).fill = leuchtendgrünFill if len(li)==3: ws.cell(nr+2,key+1).fill = redFill FreieZellen = [key for key in mydic if len(mydic[key])==0] BelegteZellen = [key for key in mydic if len(mydic[key])>0] ws.cell(nr+2,key+1,str0)#(reihe.spalte) nr+=1 print("Nr:",nr,"Version",zahla,zahlb,zahlc) print("Bestückung der Zeilen",mydic) print("BelegteKeys",len(BelegteZellen),"",BelegteZellen) print("FreieKeys",len(FreieZellen),"",FreieZellen) for x in FreieZellen:# noch in Kurzform bringen if x%2==0: GeradeKeys.append(x) UnGeradeKeys= [k for k in FreieZellen if k%2!=0] print("GeradeKeys",GeradeKeys) print("UngeradeKeysGK",UnGeradeKeys) listofvalues=list(mydic.values()) #print("Listofvalues",listofvalues) #print("key",mydic.get(key),"key",key) #ws.append(["Version"]+listofvalues) for x in GeradeKeys: for i in UnGeradeKeys: if x>i and isprime(x-i) and (x-i)>7: Entfernung.append(x-i)#Diff Entfernung.append(x)# Minuend Entfernung.append(i)#Subtrahend Entfernungen1.append(Entfernung) Entfernung.clear() Entfernungen2.append(x-i) for x in UnGeradeKeys: for i in GeradeKeys: if x>i and isprime(x-i) and (x-i)>7: Entfernungen2.append(x-i) Entfernung.append(x-i)#Diff Entfernung.append(x)# Minuend Entfernung.append(i)#Subtrahend Entfernungen1.append(Entfernung) Entfernung.clear() print("Entfernungen2",Entfernungen2) list(set(Entfernungen2)) print("Entfernungen2",[i for i in set(Entfernungen2) if Entfernungen2.count(i)<10 and i>7]) # Entfernung Duplikate, eigentlich sollen 3,5,7 hier auch raus.... if all(x in Entfernungen2 for x in [23,19,17,13,11]): N23+=1 print("N23:",N23) print("Entfernungen1",Entfernungen1) ws.append(["Permutatorprimii"]) wb.save("/Users/..../Desktop/ProjLeg/Exceldat/Permutator3-29.xlsx") GeradeKeys.clear() UnGeradeKeys.clear() Entfernung.clear() Entfernungen2.clear() Entfernungen1.clear() mydic.clear() \sourceoff


   Profil
Bilbo
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 03.01.2005
Mitteilungen: 2028
  Beitrag No.3, eingetragen 2021-07-25

Hallo Bekell, wenn Du in Zeile 108 die Liste "Entfernung" als Element in die Liste "Entfernungen1" steckst, wird dadurch keine Kopie der Liste "Entfernung" erzeugt, sondern lediglich mit einer Referenz auf diese Liste gearbeitet. Es gibt also weiterhin nur diese eine Liste. Und wenn Du sie anschließend leerst, ist sie damit auch an allen Stellen leer, an denen auf sie referenziert wird. Wenn Du das nicht willst, musst Du vorher eine Kopie dieser Liste erzeugen, z.B. mit \sourceon Python EntfernungCopy = list(Entfernung) \sourceoff Oder eben ein Tuple: \sourceon Python EntfernungTuple = tuple(Entfernung) \sourceoff Viele Grüße Thorsten


   Profil
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2489
  Beitrag No.4, vom Themenstarter, eingetragen 2021-07-25

Danke, Torsten, hört sich leichter an, als es ist: \sourceon Python \numberson Entfernungen2.append(x-i) Entfernung.append(x-i)#Diff Entfernung.append(x)# Minuend Entfernung.append(i)#Subtrahend EntfernungCopy = list(Entfernung) Entfernungen1.append(EntfernungCopy) EntfernungCopy.clear() \sourceoff Das jedenfalls, ist es nicht .... wenn ich so mach: \sourceon Python \numberson EntfernungCopy = list(Entfernung) Entfernungen1.append(EntfernungCopy) Entfernung.clear() \sourceoff erhalte ich eine Liste, in der 3-er Listen enthalten sind, aber leider nicht nur.... Entfernungen1 [[], [], [11, 22, 11, 13, 26, 13, 11, 13, 2], [13, 17, 4], [17, 19, 2], [11, 19, 8], [19, 23, 4], [13, 29, 16]] jetzt funzt es: Entfernungen1 [[11, 22, 11], [13, 26, 13], [11, 13, 2], [13, 17, 4], [17, 19, 2], [11, 19, 8], [19, 23, 4], [13, 29, 16]] Danke


   Profil
DerEinfaeltige
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 11.02.2015
Mitteilungen: 2964
  Beitrag No.5, eingetragen 2021-07-25

Du erstellst eine Kopie. Dann leerst du die Kopie und wunderst dich anscheinend, dass die Kopie danach leer ist.


   Profil
Bekell hat die Antworten auf ihre/seine Frage gesehen.
Bekell wird per Mail über neue Antworten informiert.

Wechsel in ein anderes Forum:
 Suchen    
 
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2021 by Matroids Matheplanet
This web site was originally made with PHP-Nuke, a former web portal system written in PHP that seems no longer to be maintained nor supported. PHP-Nuke is Free Software released under the GNU/GPL license.
Ich distanziere mich von rechtswidrigen oder anstößigen Inhalten, die sich trotz aufmerksamer Prüfung hinter hier verwendeten Links verbergen mögen.
Lesen Sie die Nutzungsbedingungen, die Distanzierung, die Datenschutzerklärung und das Impressum.
[Seitenanfang]