Seite 2 von 2

Verfasst: Samstag 6. März 2010, 15:11
von derdon
snafu: Es ging mir nur darum, dem TE zu zeigen, wie man eigene Generatoren definieren kann. das Modul itertools ist mir bekannt.

Verfasst: Montag 15. März 2010, 21:15
von Chibi
Sooo, musste leider die letzte zeit viel arbeiten, hab mich aber jetzt nochmal ans Programm gesetzt und mit frischem Blick und einer Pause, hab ichs endlich hinbekommen, nicht die hübscheste Lösung aber dank euch klappt jetzt alles wie ichs will.

Hier ma der Code:

Code: Alles auswählen


....
def get_clusters(node, cutoff, parent_is_cluster):
  if node.is_leaf():
    return
  avg=get_average_length(node)
  sum_dist = sum(avg)
  if node.edge.length is not None:
    sum_dist -= get_num_leaf_nodes(node, 0)*node.edge.length
  real_dist = sum_dist/get_num_leaf_nodes(node, 0)
  if real_dist <= cutoff and not parent_is_cluster:

    fobj = open("Outfile.txt", "a")
    
    print >> fobj, "Transmissionscluster:"
    print >> fobj, ""
    print >> fobj, real_dist
    print >> fobj, taxon_names(node)
    print >> fobj, "\n"
    print >> fobj, "\n"
	
	
  elif real_dist > cutoff:
    for n in node.child_nodes():
      get_clusters(n, cutoff, False)
      

cutoff=float(raw_input("Enter Cutoff value: "))

get_clusters(t1.seed_node, cutoff, False)

fobj.close()

Jetzt würd ich gerne noch ein paar Schönheitsoperationen hinsichtlich der Ausgabe vollziehen.

Mein Ergebniss sehen so aus:

bla
1.12345
['A.BC.DE', '12_345']

bla
3.45678
['F.GH.IJ', '67_890']

bla
0.00000
['A.AA.AA', '00_000']

...

Ich würd gerne noch, dass er mir anstatt nur bla
1.bla
1.12345
['A.BC.DE', '12_345']

2.bla
3.45678
['F.GH.IJ', '67_890']

3.bla
0.00000
['A.AA.AA', '00_000']

und so weiter in Textdatei schreibt. Also die bla durchnummeriert

Kann mir da nochmal jemand eine guten Tipp geben, wie ich das am besten realisieren kann?

Verfasst: Montag 15. März 2010, 21:30
von Hyperion
Da das ganze ja rekursiv abläuft müßtest Du einen Zähler durchreichen, den Du hochzählst.

Verfasst: Montag 15. März 2010, 21:44
von Chibi
Aha, könntest du mir das bitte genauer erklären. Was meinst du mit "durchreichen"?

Verfasst: Montag 15. März 2010, 21:56
von Hyperion
Na, Du gibst doch in get_clusters diese Dinge aus, richtig? Dann musst Du auf jeder Rekursionsebene wissen, wie Dein Zähler grad aussieht. Also musst Du ihn als Parameter bei jedem rekursiven Aufruf mit angeben und dann innerhalb der Funktion entsprechend der Ausgaben erhöhen.