J'exécute une commande où la sortie est une liste de nombres:
output = subprocess.run(['command'], stdout = subprocess.PIPE)
La sortie (output.stdout.decode('utf-8')
) ressemble à ceci:
1
534
89
4
57
9
Je dois trouver si un numéro spécifique ne figure pas dans cette liste. Le problème est que si je recherche en utilisant if num not in list:
pour num = 3 j'obtiendrai vrai puisque le nombre 534 est dans cette liste.
Comment puis-je vérifier si un numéro (dans une ligne à part) est dans la liste?
3 réponses
Il suffit de diviser votre liste et de vérifier soit le mot, soit l'entier, en utilisant la compréhension d'ensemble pour vous débarrasser des doublons:
if 3 in {int(x) for x in output.stdout.decode('utf-8').split()}:
Une manière plus simple est également possible avec la sortie directe de split
:
if "3" in output.stdout.decode('utf-8').split():
(moins puissant si les entiers peuvent commencer par 0: 03
)
Vous pouvez également utiliser le module re
:
import re
lookup=3
pattern = re.compile('\b{}\b'.format(lookup))
if pattern.search(output.stdout.decode('utf-8')):
...
Je viens d'ajouter à la réponse de Jean-François. Split () se divise par défaut sur les espaces blancs, mais comme vous auriez besoin de fractionner sur des lignes, je suggère de fractionner ('\ n') pour effectuer le fractionnement, de cette façon le code serait plus résistant
Questions connexes
Questions liées
De nouvelles questions
python
Python est un langage de programmation multi-paradigme, typé dynamiquement et polyvalent. Il est conçu pour être rapide à apprendre, comprendre, utiliser et appliquer une syntaxe propre et uniforme. Veuillez noter que Python 2 est officiellement hors support à partir du 01-01-2020. Néanmoins, pour les questions Python spécifiques à la version, ajoutez la balise [python-2.7] ou [python-3.x]. Lorsque vous utilisez une variante Python (par exemple, Jython, PyPy) ou une bibliothèque (par exemple, Pandas et NumPy), veuillez l'inclure dans les balises.