Traitement itératif Python appris avec ChemoInfomatics

introduction

Dans la continuité de Branchage conditionnel de Python appris par chimioinfomatique, j'expliquerai le «traitement d'itération» avec le thème de la lipidomique (analyse complète des lipides). Nous expliquerons principalement des exemples pratiques de chimioinfomatique, donc si vous souhaitez vérifier les bases, veuillez lire l'article suivant avant de lire cet article.

Un chercheur d'une société pharmaceutique a résumé les déclarations de contrôle Python

pour déclaration

«for» peut être utilisé pour itérer un nombre prédéterminé de fois. Comme pour variable in iterable (list etc.):, Décrivez le contenu de traitement en coupant la ligne et en indentant 4 espaces demi-largeur.

carbon_numbers = [16, 18, 20, 22, 24]

for Cn in carbon_numbers:
    print(Cn, 0, sep=':')

Dans l'exemple ci-dessus, les "nombres de carbone" sont utilisés comme liste d'atomes de carbone (longueur de chaîne) d'acides gras, et les abréviations d'acides gras saturés correspondant à chacun sont créées.

range

Vous pouvez également utiliser range comme itérable. range est une image comme une liste continue d'entiers dans une plage spécifiée.

Cn = 22

for Un in range(4, 7):
    print(Cn, Un, sep=':')
    
for Un in range(7):
    print(Cn, Un, sep=':')

Dans l'exemple ci-dessus, «range (4, 7)» indique un entier continu de 4 à 6 (4, 5, 6). De plus, écrire «range (7)» signifie des entiers consécutifs de 0 à 6 (0, 1, 2, 3, 4, 5, 6). Ici, une valeur numérique indiquant le degré de saturation des acides gras (le nombre de doubles liaisons dans la chaîne carbonée) est générée.

enumerate

Vous pouvez récupérer le numéro d'index itérable et l'élément sous forme d'ensemble en utilisant ʻenumerate` comme indiqué ci-dessous.

fatty_acids = ['FA 16:0', 'FA 18:0', 'FA 18:1']

for fatty_acid in fatty_acids:
    print(fatty_acid)

for i, fatty_acid in enumerate(fatty_acids):
    print(f'{i}: {fatty_acid}')

Dans l'exemple ci-dessus, le numéro d'index de la liste «gras_acides» est stocké dans «i», la valeur de l'élément de la liste «gras_acids» est stockée dans l'ordre «gras_acid», et elle est sortie par «print». ..

dictionnaire

Vous pouvez également parcourir un dictionnaire en utilisant for. Un exemple est présenté ci-dessous.

fatty_acids = {'Palmitic acid': 'FA 16:0', 'Stearic acid': 'FA 18:0', 'Oleic acid': 'FA 18:1'} #Nom et abréviation des acides gras (nom usuel)

for key in fatty_acids.keys(): #Clé du dictionnaire
    print(key)
    
for value in fatty_acids.values(): #Valeur du dictionnaire
    print(value)
    
for key, value in fatty_acids.items(): #Clés et valeurs du dictionnaire
    print(f'{key} is {value}')

    
exact_mass = {'C': 12, 'H': 1.00783, 'O': 15.99491} #Symbole d'élément et poids atomique
formula_pa = {'C': 16, 'H': 32, 'O': 2} #Symbole d'élément et nombre d'atomes (formule de composition)
em_pa = 0

for key, value in formula_pa.items():
    em_pa += exact_mass[key] * value #Multipliez le poids atomique et le nombre d'atomes
print(em_pa)


fatty_acids = {16: [0, 1], 18: [0, 1, 2, 3, 4], 20: [0, 3, 4, 5], 22: [0, 4, 5, 6]} #Un dictionnaire avec le nombre d'atomes de carbone de l'acide gras comme clé et le nombre de doubles liaisons comme valeur

for Cn, Uns in fatty_acids.items():
    for Un in Uns:
        print(Cn, Un, sep=':')

Ici, ʻa = a + n peut être écrit comme ʻa + = n. La partie de ʻem_pa + = exact_mass [clé] * valeur signifie que chaque atome est multiplié par le poids atomique et le nombre d'atomes et ajouté à la variable ʻem_pa qui calcule la masse précise.

Combinaison avec branchement conditionnel

Bien sûr, il peut également être combiné avec «si».

fatty_acids = ['FA 16:0', 'FA 18:0', 'FA 18:1', 'FA 18:2', 'FA 20:4', 'FA 22:6', 'FA 24:0']

saturated_fatty_acids = [] #Liste vide (j'entrerai des valeurs dans le traitement suivant)
unsaturated_fatty_acids = [] #Liste vide (j'entrerai des valeurs dans le traitement suivant)

for fatty_acid in fatty_acids:
    if fatty_acid[-1] == '0':
        saturated_fatty_acids.append(fatty_acid) #Les acides gras saturés
    else:
        unsaturated_fatty_acids.append(fatty_acid) #Acides gras insaturés
        
print(saturated_fatty_acids)
print(unsaturated_fatty_acids)

pause et continue

Utilisez break comme indiqué ci-dessous pour interrompre le processus itératif. ʻElse est utilisé pour décrire ce qui se passe lorsque le traitement itératif se termine sans rupture`. Ce n'est pas grave si vous n'avez pas «sinon».

fatty_acids = ['FA 16:0', 'FA 18:0', '', 'FA 18:1']

for fatty_acid in fatty_acids:
    if fatty_acid == '':
        print('C'est vide. Annule le traitement.')
        break
    print(fatty_acid) # 「FA 18:Sortie jusqu'à "0"
else:
        print('Le processus est terminé.') #Pas de sortie ici

Dans l'exemple ci-dessus, le troisième élément en partant de la gauche de la liste gras_acids est vide, donc itère jusqu'à l'élément précédent et imprime la valeur de l'élément. Dans cet exemple, ʻelse et ci-dessous ne sont pas exécutés car le processus est interrompu par break`.

D'un autre côté, utiliser continue saute l'itération.

fatty_acids = ['FA 16:0', 'FA 18:0', '', 'FA 18:1']

for fatty_acid in fatty_acids:
    if fatty_acid == '':
        print('C'est vide. Sauter')
        continue
    print(fatty_acid) #Passer les éléments vides "FA 18:Sorties jusqu'à 1 "

Dans l'exemple ci-dessus, les éléments vides sont ignorés par «continue», de sorte que la valeur de l'élément n'est pas sortie, mais elle est traitée jusqu'à la fin et «FA 18: 1» est également sortie. Si ʻelse` est entré, ce qui suit sera également exécuté.

Application: notation SMILES

Ici, comme application, nous allons envisager de trouver le nombre d'atomes de carbone et le nombre de doubles liaisons dans la chaîne carbonée à partir de la chaîne de caractères écrite en notation SMILES.

smiles_fa = 'OC(CCCCCCC/C=C\C/C=C\CCCCC)=O'

Cn = 0
Un = 0

for i in range(len(smiles_fa)):
    if smiles_fa[i] == 'C':
        Cn += 1
    elif smiles_fa[i] == '=' and smiles_fa[i+1] == 'C':
        Un += 1

print(Cn, Un, sep=':')

En regardant la chaîne de caractères de gauche, si c'est «C», augmentez la variable «Cn» qui compte le nombre d'atomes de carbone par 1, et si «=» et le caractère suivant est «C» (il y a aussi du carbone carbonyle) Parce que), la variable «Un» qui compte le nombre de doubles liaisons est augmentée de 1.

déclaration while

Si vous utilisez while, effectuez une itération tant que les conditions spécifiées sont remplies. Décrivez le processus en coupant la ligne comme «condition while:» et en indentant 4 espaces demi-largeur.

saturated_fatty_acids = ['FA 16:0', 'FA 18:0']
unsaturated_fatty_acids = ['FA 18:1', 'FA 18:2', 'FA 18:3', 'FA 20:4', 'FA 22:6']

fatty_acids = []

while len(saturated_fatty_acids) > 0:
    fatty_acids.append(saturated_fatty_acids[-1])
    saturated_fatty_acids.pop()

while len(unsatturated_fatty_acids) > 0:
    fatty_acids.append(unsaturated_fatty_acids[-1])
    unsaturated_fatty_acids.pop()

print(fatty_acids)

Dans l'exemple ci-dessus, les éléments sont pris à l'arrière des listes d'origine «satured_fatty_acids» et «unsatured_fatty_acids» et déplacés vers la nouvelle liste vide «gras_acids». Ici, len (liste)> 0 fait référence au cas où la liste contient des éléments. Après avoir déplacé l'élément vers gras_acids, j'essaye de supprimer l'élément de la liste d'origine avec pop. Notez que si vous oubliez de supprimer ceci, le processus sera répété indéfiniment (boucle infinie).

Application: notation SMILES

Enfin, en tant qu'application, considérons de compter le nombre d'atomes de carbone en utilisant while en notation SMILES.

smiles_fa = 'OC(CCCCCCCCCCCCCCC)=O'

Cn = 0

while 'C' in smiles_fa:
    if smiles_fa[0] == 'C':
        Cn += 1
    smiles_fa = smiles_fa[1:]
print(Cn)

Si la chaîne SMILES contient le caractère «C» et que le caractère le plus à gauche est «C», augmentez la variable «Cn», qui compte le nombre d'atomes de carbone, de 1. Le caractère le plus à gauche est effacé à chaque fois, qu'il s'agisse de «C» ou non. Cela vous permettra de compter le nombre de Cs dans SMILES.

Comme mentionné ci-dessus, «for» est utilisé lorsque le nombre de répétitions est fixe, et «while» est utilisé lorsque le nombre de répétitions n'est pas fixe.

Résumé

Ici, j'ai expliqué le traitement itératif de Python, en me concentrant sur les connaissances pratiques pouvant être utilisées en chimioinfomatique. Revoyons à nouveau les principaux points.

--for peut être utilisé lorsque le nombre de répétitions est fixe. Vous pouvez également utiliser «pause» ou «continuer» pour arrêter ou ignorer le traitement dans certaines conditions.

Ensuite, l'article suivant explique les fonctions Python.

Fonctions Python apprises avec chemoinfomatics

Documents de référence / liens

Étonnamment peu! ?? Connaissances "minimales" requises pour la programmation dans une entreprise pharmaceutique

Recommended Posts

Traitement itératif Python appris avec ChemoInfomatics
Apprendre Python avec ChemTHEATER 03
Apprendre Python avec ChemTHEATER 05-1
Apprendre Python avec ChemTHEATER 02
Apprendre Python avec ChemTHEATER 01
Apprentissage amélioré à partir de Python
Apprentissage automatique avec Python! Préparation
Commencer avec l'apprentissage automatique Python
Apprentissage automatique par python (1) Classification générale
Entrée / sortie avec Python (mémo d'apprentissage Python ⑤)
Mémo d'apprentissage "Scraping & Machine Learning avec Python"
FizzBuzz en Python3
Grattage avec Python
[Python] Note d'apprentissage 1
Notes d'apprentissage Python
Statistiques avec python
Grattage avec Python
Python avec Go
sortie d'apprentissage python
Apprentissage automatique avec python (2) Analyse de régression simple
Twilio avec Python
Intégrer avec Python
Jouez avec 2016-Python
AES256 avec python
Site d'apprentissage Python
Testé avec Python
Apprentissage Python jour 4
python commence par ()
[Shakyo] Rencontre avec Python pour l'apprentissage automatique
avec syntaxe (Python)
Apprentissage en profondeur Python
apprentissage python (supplément)
Zundokokiyoshi avec python
Analyse de données à partir de python (pré-traitement des données-apprentissage automatique)
[Python] Essayez facilement l'apprentissage amélioré (DQN) avec Keras-RL
notes d'apprentissage python
Construction d'environnement AI / Machine Learning avec Python
Excel avec Python
Micro-ordinateur avec Python
Cast avec python
[Python] Introduction facile à l'apprentissage automatique avec python (SVM)
Apprentissage automatique à partir de Python Personal Memorandum Part2
Apprentissage automatique à partir de Python Personal Memorandum Part1
[Python] Collectez des images avec Icrawler pour l'apprentissage automatique [1000 feuilles]
J'ai commencé l'apprentissage automatique avec le prétraitement des données Python
Créer un environnement d'apprentissage automatique Python avec des conteneurs
Communication série avec Python
Zip, décompressez avec python
Django 1.11 a démarré avec Python3.6
Jugement des nombres premiers avec Python
Python avec eclipse + PyDev.
Communication de socket avec Python
Analyse de données avec python 2
Grattage en Python (préparation)
Recherche séquentielle avec Python
Module Python (mémo d'apprentissage Python ④)
Exécutez Python avec VBA
Manipuler yaml avec python
Apprentissage amélioré 1 installation de Python
Résolvez AtCoder 167 avec python
Communication série avec python