Maximum in Zeile finden

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
silky vanilla
User
Beiträge: 51
Registriert: Donnerstag 3. Mai 2007, 09:46

Freitag 13. Juli 2007, 09:03

Code: Alles auswählen

inp0 = open('STRING_textmining.tab')
header0 = inp0.readline()
inp1 = open('Ewing_Score nicht log trans1.LLS')
header1 = inp1.readline()
inp2 = open('Rhodes_Score1.LLS')
header2 = inp2.readline()
inp3 = open('STRING_coexpression1.LLS')
header3 = inp3.readline()
inp4 = open('STRING_cooccurence1.LLS')
header4 = inp4.readline()
inp5 = open('STRING_fusion1.LLS')
header5 = inp5.readline()
inp6 = open('STRING_neighborhood1.LLS')
header6 = inp6.readline()
inp7 = open('STRING_textmining1.LLS')
header7 = inp7.readline()

out = open('sum_of_all_LLS','w')


for line0, line1, line2, line3, line4, line5, line6,line7 in zip(inp0, inp1, inp2, inp3, inp4, inp5, inp6, inp7):
    cols0 = line0.split()
    cols1 = line1.split()
    cols2 = line2.split()
    cols3 = line3.split()
    cols4 = line4.split()
    cols5 = line5.split()
    cols6 = line6.split()
    cols7 = line7.split()
    
    sum = float(cols1[3])+float(cols2[3])+float(cols3[3])+float(cols4[3])+float(cols5[3])+float(cols6[3])+float(cols7[3])
    
    newline = '%s\t%s\t%s\t%f\n' % (cols0[0], cols0[1], cols0[2], sum)
    out.write(newline)

inp0.close()
inp1.close()
inp2.close()
inp3.close()
inp4.close()
inp5.close()
inp6.close()
inp7.close()
out.close()
Hier habe ich 6 Dateien deren Summe ich jeweils aus den Elementen in Spalte 4 bilde und in eine neue Datei schreibe.

Ich moechte jetzt aber nicht die Summe bilden, sondern ueberpruefen, welcher Eintrag das Maximum ist und den dann in die neue Datei schreiben.

Ich weis dass man mit max(x,y) das Maximum von zwei Werten finden kann, aber in meinem Fall bei 6 Werten?

Vielleicht koennte ich irgendwie bei dem ersten Wert angefangen ueberpruefen, ob der naechste Wert groesser ist und dann den merken, dann den Wert mit dem naechsten ueberpruefen usw. Doch wie setze ich so was am besten um?
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

Freitag 13. Juli 2007, 09:12

max kann auch mit sequenzen ;)

Code: Alles auswählen

>>> l = range(10)
>>> l
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> max(l)
9
>>>
Außerdem würde ich dir empfehlen ein bisschen über die wiederverwendbarkeit von Code nachzudenken.
Es gibt listen, dictionaries und ähnliches.
ein guter Anfang wäre (wenn überhaupt nötig)
Nur eine Liste zu erstellen mit den Dateinamen oder diese per
os.listdir() direkt einzulesen. Du machst mit jeder Datei das selbe
somit sollte man diese auch in einer for-Schleife abarbeiten anstatt
für jede Datei den Code neu zu schreiben.
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

Freitag 13. Juli 2007, 09:48

Mal ohne Netz und doppelten Boden sollte das hier identisch zu deinem arbeiten.

Code: Alles auswählen

file_list = ['STRING_textmining.tab',
             'Ewing_Score nicht log trans1.LLS', 
             'Rhodes_Score1.LLS',
             'STRING_coexpression1.LLS', 
             'STRING_cooccurence1.LLS', 
             'STRING_fusion1.LLS',
             'STRING_neighborhood1.LLS',
             'STRING_textmining1.LLS']
        
out = open('sum_of_all_LLS','w')  

headers = []
inps = []
for fn in file_list:
    f = open(fn)
    headers.append(f.readline())
    inps.append(f)
 
for lines in zip(inps):
    cols = [ line.split() for line in lines ]
    total = sum([float(col[3]) for col in cols ]) )
    
    newline = '%s\t%s\t%s\t%f\n' % (cols[0][0], cols[0][1], cols[0][2], total) 
    out.write(newline)  

for f in inps: 
    f.close()

out.close() 
silky vanilla
User
Beiträge: 51
Registriert: Donnerstag 3. Mai 2007, 09:46

Freitag 13. Juli 2007, 09:49

oh, danke.

mittlerweile hatte ich es auch schon geloest, sorry also fuer deinen Aufwand. :lol:
Antworten