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.
3 Réponses :
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 () .
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)
Oui, comme mon commentaire!
str.rsplitinfx = 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]
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]
Pourquoi avez-vous défini des pandas?
retirez la partie
/ xymon / fnwp / mphhos /deetcd, puis appliquez votre différence définieEssayez
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]