aide exploitation table de donnees - Python - Programmation
Marsh Posté le 08-04-2014 à 20:10:35
Oui en effet, je pense que les dictionnaires sont une bonne solution, surtout pour un affichage plus facilement gérable.
Voilà une solution:
Code :
|
Le rendu est sympa
fred1599@fred1599-Aspire-5741G:~$ python3 test.py
0.0
A3 B3
A7 B1
A2 B4
0.1
A3 B5
A6 B8
0.2
A1 B1
0.5
A1 B2
0.6
A2 B3
0.9
A5 B4
Marsh Posté le 08-04-2014 à 17:48:18
Bonjour, je suis débutante en programmation et on nous a demandé de traiter un fichier texte de type:
A1 B1 0.2
A2 B3 0.6
A3 B3 0.0
A3 B5 0.1
A1 B2 0.5
A5 B4 0.9
A6 B8 0.1
A7 B1 0.0
A2 B4 0.0
Le but est de rendre une liste ou un dictionnaire qui donnera les couples A-B lorsqu'à la fois A et B sont unique, ainsi que, lorsque A ou B est doublé, sélectionne le couple pour lequel on a la plus petite valeur.
J'ai réussi à selectionner les couples lorsque A est unique ou appartient au plus faible, mais je ne sais pas comment m'y prendre pour selectionner les B ensuite. D'autant que je suis sûre que j'ai plein de données inutiles dans mon programme. Pour l'instant, ça ressemble à ça:
# fonction de comparaison
def ortho (m):
ort1 = {}
ortb = {}
ortho = {}
test = []
testb = []
c=0
x=0
y=0
lb2=0
lb1=0
lignes=len(m)
colonnes=len(m[0])
#on parcourt la liste des gènes A
for lignes in range(0, len(m)):
A=m[lignes][0]
c=c+1
if c<(len(m)):
if A in test:
y=lignes
if x != y:
if m[x][2]<m[y][2]:
ort1[m[x][0]] = lignes
else:
ort1[m[y][0]] = lignes
#print 'test A dans test'
#print lignes
else:
test.append(A)
ort1[m[x][0]] = lignes
x=lignes
#print 'enregistrer A'
#print lignes
#print A
#print lignes
#parmis les genes selectionnes on verifie les B uniques:
for values in ort1.values():
B=m[values][1]
if B in testb:
lb2=lignes
#comparaison des evalues des deux associations de B:
if m[lb1][2]<m[lb2][2]:
ortho[m[lb1][0]]=m[lb1][1]
else:
ortho[m[lb2][0]]=m[lb2][1]
else:
testb.append(B)
ortb[m[lb1][0]]=m[lb1][1]
ortb[m[values][0]]= m[values][1]
return (ort1, ortb, ortho)
m = lire('tab')
print ortho(m)
normalement (j'ai traitée les données à la main), si le programme était correct, je devrais obtenir dans ortho les couples (A3-B3, A6-B8, A7-B1 et A2-B4), mais je n'obtient que le dernier, A2-B4.
Donc, si quelqu'un avait une idée d'où j'ai fais des erreurs et saurait ce qui est complètement inutile... je serais très reconnaissante. Merci d'avance!
Message édité par eryalk9 le 08-04-2014 à 18:07:26