IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Besoin d'aide, mettre plusieurs max dans une variable


Sujet :

Python

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2018
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Besoin d'aide, mettre plusieurs max dans une variable
    Bonjour, j'aimerais savoir comment faire pour affecter plusieurs max sur une même variable dans mon code ci dessous:
    http://image.noelshack.com/fichiers/...59-python1.png

    Pour arriver à ça comme résultat:
    Chaîne : « ACCATAGC »
    représentation valide d'un brin d'ADN.
    Les fréquences sont : - Adénine 37.5 % - Cytosine 37.5 % - Guanine 12.5 % - Thyamine 12.5 %
    La(es) base(s) nucleique(s) la(es) plus presente(s) est(sont):
    - Adénine
    - Cytosine

    merci

  2. #2
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    salut,

    t'as essayé des trucs ? montre du code pour qu'on puisse t'aider

  3. #3
    Membre émérite

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Points : 2 328
    Points
    2 328
    Par défaut
    Quand tu dis : "Les fréquences sont : - Adénine 37.5 % - Cytosine 37.5 % - Guanine 12.5 % - Thyamine 12.5 %", tu stockes cela comment dans la machine ? Un dictionnaire ? Une liste de 4 éléments ? Un array numpy de 4 éléments ? Dans 4 variables distinctes ? Tu garde la correspondances avec les noms de molécules à côté ? ....

    Avec 4 valeurs tu peux tout simplement le faire à la main. Après il existe d'autres méthodes toute faites mais ca va dépendre du stockage de l'info. Par exemple si c'est dans une liste on va avoir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    indices_des_max = [i for i, x in enumerate(my_list) if x == max(my_list) ]
    en numpy :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    indices_des_max = np.where(my_array == np.max(my_array))[0]

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2018
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     str = 'ACCATAGC'
    print ( "Chaîne : «" , str , '»' )
     
    est_ADN = True
     
    a = 0
    c = 0
    g = 0
    t = 0
     
    for x in str:
        if x not in ('A','C','G','T') :
            print (str,'ne représent pas de brin d\'ADN.')
            break
     
    for x in str:
        if x == 'A' in str:
            a = a+1
        if x == 'C' in str:
            c = c+1
        if x == 'G' in str:
            g= g+1
        if x == 'T' in str:
            t = t+1
     
    w=len(str)
     
     
    max(a,c,g,t)
     
     
    print (str,'représentation valide d\'un brin d\'ADN.\
    Les fréquences sont : - Adénine',a/w*100,' % - Cytosine ',c/w*100,'  % - Guanine ',g/w*100,' % - Thyamine',t/w*100,' %\
    La(es) base(s) nucleique(s) la(es) plus presente(s) est(sont):',)

  5. #5
    Membre émérite

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Points : 2 328
    Points
    2 328
    Par défaut
    Tu peux donc t'en sortir avec la pemière instructions que j'ai proposée :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    my_list = [a,c,g,t]
    bases = ["adenine","cytosine","guanine","thyamine"]
    indices_des_max = [i for i, x in enumerate(my_list) if x == max(my_list) ]
    for i in indices_des_max :
        print(bases[i])

  6. #6
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    Utilise count() pour simplifier ton code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    >>> adn = 'ACCATAGC'
    >>> a = adn.count('A')
    >>> c = adn.count('C')
    >>> g = adn.count('G')
    >>> t = adn.count('T')
    >>> a, c, g, t
    (3, 3, 1, 1)
    >>> max(a, c, g, t)
    3

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2018
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci

  8. #8
    Membre actif
    Profil pro
    Loisir
    Inscrit en
    Novembre 2011
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Loisir

    Informations forums :
    Inscription : Novembre 2011
    Messages : 159
    Points : 284
    Points
    284
    Par défaut
    Bonjour,

    ton algo est à vomir J'espère que tu ne travailles pas sur une chaine de plusieurs millions de caractères avec le dernier étant mauvais car sinon tu vas perdre du temps pour rien.

    Une proposition de code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    from collections import Counter
     
    # U n'est pas valide ?
    code = {'A': 'Adénine', 'C': 'Cytosine', 'G': 'Guanine', 'T':'Thymine'}
     
    adn = 'ATACGGTAGTCGTATTGCAGCAGGTCCA'
     
    if len([ k for k in set(adn) if k not in code.keys()]):
        print(adn, 'n\'est pas un fragment ADN valide')
    else:
        cnt = Counter()
        length = len(adn)
        for x in adn:
            cnt[x] += 1
        print(adn, ' est un fragment ADN valide')
        print('Les fréquences sont :')
        for k in cnt.keys():
            print('-',  code[k], '{:.2%} ;'.format(cnt[k]/length))
     
        inv_cnt = {}
        for k, v in cnt.items():
            inv_cnt[v] = inv_cnt.get(v, [])
            inv_cnt[v].append(k)
     
        most_common = inv_cnt[max(list(inv_cnt.keys()))]
        print('La(es) base(s) nucleique(s) la(es) plus presente(s) est(sont):')
        for c in most_common:
            print('-',  code[c])

  9. #9
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    salut,

    je propose ce truc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    from collections import Counter
     
    def coincoin(seq):
       dico = {'A': 'Adénine', 'C': 'Cytosine', 'T': 'Thymine', 'G': 'Guanine'}
       print('Chaîne : « {} »'.format(seq))
       if seq and all([i in 'ACTG' for i in seq]):
          print("représentation valide d'un brin d'ADN")
          z = Counter(seq)
          print('Les fréquences sont :', ' '.join('- {} {:.1f}%'.format(dico[i], z[i]*100/len(seq)) for i in z))
          k = [i for i in z if z[i] == z[max(z, key=z.get)]]
          print(
             'L{0} base{1} nucléïque{1} l{0} plus présente{1} {2}:\n{3}'.format(
                *('es', 's', 'sont') if len(k)>1 else ('a', '', 'est'),
                '\n'.join('- {}'.format(dico[i]) for i in k)
             )
          )
       else:
          print("représentation non-valide d'un brin d'ADN")
    et son exécution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    >>> coincoin('')
    Chaîne : «  »
    représentation non-valide d'un brin d'ADN
     
    >>> coincoin('ACCATAGC')
    Chaîne : « ACCATAGC »
    représentation valide d'un brin d'ADN
    Les fréquences sont : - Adénine 37.5% - Cytosine 37.5% - Thymine 12.5% - Guanine 12.5%
    Les bases nucléïques les plus présentes sont:
    - Adénine
    - Cytosine
     
    >>> coincoin('AAAAAAACT')
    Chaîne : « AAAAAAACT »
    représentation valide d'un brin d'ADN
    Les fréquences sont : - Adénine 77.8% - Cytosine 11.1% - Thymine 11.1%
    La base nucléïque la plus présente est:
    - Adénine

  10. #10
    Membre habitué Avatar de racine carrée
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 156
    Points : 137
    Points
    137
    Par défaut
    Ou bien voici une autre solution ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    def analyse(chaine):
        infos={'A':[0,"adenine"],'C':[1,"cytosine"],'G':[2,"guanine"],'T':[3,"thyamine"]}
        taux=[0]*4
        for k in chaine:
            if k not in 'ACGT': return "ceci n'est pas un brin d'ADN"
            taux[infos[k][0]]+=1
        maxi=[k for k in infos if taux[infos[k][0]]==max(taux)]
        print("ce brin d'ADN contient:\n".join(["{0}% de {1}\n".format(100*taux[infos[k][0]]/len(chaine),infos[k][1]) for k in infos])+''.join(["La plus présente est:\n" if len(maxi)==1 else "les plus présentes sont:\n"]+["la {}\t".format(infos[k][1]) for k in maxi]))
    Bon courage

Discussions similaires

  1. [OpenOffice][Tableur] Comment mettre plusieurs paramètres dans une formule
    Par grosminet03 dans le forum OpenOffice & LibreOffice
    Réponses: 1
    Dernier message: 04/11/2010, 09h58
  2. Besoin d'aide pour plusieurs Layout sur une même Frame
    Par CosaNostra dans le forum Agents de placement/Fenêtres
    Réponses: 8
    Dernier message: 12/02/2010, 16h27
  3. mettre plusieurs valeurs dans une cellule
    Par mgrizzly dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 15/05/2009, 10h42
  4. [Portlet] Mettre plusieurs portlets dans une portlet mère
    Par maysam dans le forum Portails
    Réponses: 3
    Dernier message: 24/02/2009, 21h20
  5. [Debutant] Peut-on mettre plusieurs "submit" dans une servlet
    Par pracede2005 dans le forum Servlets/JSP
    Réponses: 8
    Dernier message: 22/10/2007, 10h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo