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?

0
Pace 17 avril 2018 à 12:09

3 réponses

Meilleure réponse

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)

0
Jean-François Fabre 17 avril 2018 à 09:14

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')):
    ...
0
zipa 17 avril 2018 à 09:25

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

0
Nishant Ravindran 17 avril 2018 à 09:17