1
votes

comparaison de deux listes avec un format différent

J'ai deux listes: -

influx = [u'mphhos-fnwp-010101-2', 
          u'mphhos-fnwp-010101-1', 
          u'mphhos-fnwp-010101-7', 
          u'mphhos-fnwp-010101-10', 
          u'mphhos-fnwp-010101-9', 
          u'mphhos-fnwp-010101-4', 
          u'mphhos-fnwp-010101-3', 
          u'mphhos-fnwp-010101-8', 
          u'mphhos-fnwp-010101-6', 
          u'mphhos-fnwp-010101-5', 
          u'mphhos-fnwp-010101-11'] 

etcd =[u'/xymon/fnwp/mphhos/mphhos-fnwp-010101-4', 
       u'/xymon/fnwp/mphhos/mphhos-fnwp-010101-9', 
       u'/xymon/fnwp/mphhos/mphhos-fnwp-010101-1', 
       u'/xymon/fnwp/mphhos/mphhos-fnwp-010101-10', 
       u'/xymon/fnwp/mphhos/mphhos-fnwp-010101-3', 
       u'/xymon/fnwp/mphhos/mphhos-fnwp-010101-6', 
       u'/xymon/fnwp/mphhos/mphhos-fnwp-010101-7', 
       u'/xymon/fnwp/mphhos/mphhos-fnwp-010101-8', 
       u'/xymon/fnwp/mphhos/mphhos-fnwp-010101-11', 
       u'/xymon/fnwp/mphhos/mphhos-fnwp-010101-2', 
       u'/xymon/fnwp/mphhos/mphhos-fnwp-010101-5']

Etcd est la liste parente et je veux comparer l'influx avec Etcd.

1.) Je veux obtenir tous les éléments qui ne sont pas présents dans l'influx de liste et les renvoyer.

2.) Comment puis-je convertir la liste etcd en formatage de liste d'influx en omettant / xymon / fnwp / mphhos /

L'une ou l'autre des questions ci-dessus m'apportera ma solution.

J'ai essayé de nombreuses méthodes mais je n'obtiens pas ma solution car elles sont dans un format différent.

J'obtiendrai ma réponse en faisant set (etcd) -set (influx) mais comme ils sont dans un format différent, j'obtiens tous les éléments de la liste.


4 commentaires

Pourquoi avez-vous défini des pandas?


retirez la partie / xymon / fnwp / mphhos / de etcd , puis appliquez votre différence définie


Essayez set ([x.replace ('/ xymon / fnwp / mphhos /', '') pour x dans etcd]) - set (influx)


[x pour x dans etcd si x.replace ('/ xymon / fnwp / mphhos /', '') n'est pas dans l'influx]


3 Réponses :


0
votes

Une solution simple serait de supprimer les préfixes

for i, char in enumerate(etcd): 
    char = char.replace('/xymon/fnwp/mphhos/', '')
    etcd[i] = char

Et puis vous pourriez trouver les différences en utilisant set () .


0 commentaires

0
votes
influx = [u'mphhos-fnwp-010101-2',
          u'mphhos-fnwp-010101-1',
          u'mphhos-fnwp-010101-7',
          u'mphhos-fnwp-010101-10',
          u'mphhos-fnwp-010101-9',
          u'mphhos-fnwp-010101-4',
          u'mphhos-fnwp-010101-3',
          u'mphhos-fnwp-010101-8',
          u'mphhos-fnwp-010101-6',
          u'mphhos-fnwp-010101-5',
          u'mphhos-fnwp-010101-11']

etcd =[u'/xymon/fnwp/mphhos/mphhos-fnwp-010101-4',
       u'/xymon/fnwp/mphhos/mphhos-fnwp-010101-9',
       u'/xymon/fnwp/mphhos/mphhos-fnwp-010101-1',
       u'/xymon/fnwp/mphhos/mphhos-fnwp-010101-10',
       u'/xymon/fnwp/mphhos/mphhos-fnwp-010101-3',
       u'/xymon/fnwp/mphhos/mphhos-fnwp-010101-6',
       u'/xymon/fnwp/mphhos/mphhos-fnwp-010101-7',
       u'/xymon/fnwp/mphhos/mphhos-fnwp-010101-8',
       u'/xymon/fnwp/mphhos/mphhos-fnwp-010101-11',
       u'/xymon/fnwp/mphhos/mphhos-fnwp-010101-2',
       u'/xymon/fnwp/mphhos/mphhos-fnwp-010101-5']

etcd = [x.replace('/xymon/fnwp/mphhos/', '') for x in etcd]

# or using regex
# etcd = [re.sub('/xymon/fnwp/mphhos/', '', x) for x in etcd]
diff = set(etcd) - set(influx)

print(diff)

1 commentaires

Oui, comme mon commentaire!



1
votes

str.rsplit
infx = set(influx)
[x for x in etcd if x.rsplit('/', 1)[1] not in infx]

Selon la suggestion de rafaelc

[x for x in etcd if x.rsplit('/', 1)[1] not in influx]


1 commentaires

Bonne idée. Mais vous voudriez le faire avant la compréhension pour éviter de créer l'ensemble à chaque fois. infx = set (influx); [x pour x dans etcd si x.rsplit ('/', 1) [1] pas dans infx]