0
votes

Recherchez si l'article de la liste A dans la gamme d'articles dans Subliste de la liste B

Disons que j'ai deux listes.

dictt = {2:'yes',12:'no',33:'no',40:'yes',500:'no'}


9 commentaires

Je vais assumer ces _ dans y est une faute de frappe et doit être , ? Peut-être mettre à jour le message pour refléter cela.


Vous devrez modifier les éléments dans y pour être des chaînes, comme dans le premier exemple.


Vient de les changer vers des cordes.


Désolé, qu'en est-il de cela ne fonctionne pas? Cela donne le résultat attendu ...


Je m'assurais bien que la déclaration d'autre était correcte, ou si j'avais besoin d'un elif.


Le sinon est au mauvais endroit. Vous voulez seulement affecter no à la dicte si chaque élément de Y échoue pour correspondre, mais vous attribuez «non» si le actuel L'élément ne correspond pas.


Je veux affecter un NON si aucun élément de x tombe dans une plage d'un élément de y.


^ IDD. Je pense que le point John essaie de faire, est le fait que vous pouvez attribuer plusieurs fois à la gamme plusieurs fois, avant d'attribuer un oui. Juste un commentaire sur la gamme, vous pouvez le définir comme des tuples au lieu de cordes, pour éliminer la "Split" à chaque fois.


Le code fonctionne aussi longtemps que les deux listes sont triées, malgré les opérations redondantes.


3 Réponses :


0
votes

Cela fonctionne. Comme vous l'avez écrit.

{2: 'yes', 12: 'no', 33: 'no', 40: 'yes', 500: 'no'}


0 commentaires

1
votes

Que diriez-vous de vérifier si le numéro est compris entre l'une des numéros de la liste Y . XXX

Remarque: Sinon, si vous utilisez Python 2, utilisez toujours xrange et non plage . Xrange ne gardera pas tous les nombres dans la mémoire que la gamme fait. Ce sera un problème lorsque la gamme est plus grande. Python3 sera par défaut à Xrange.


4 commentaires

Cela a travaillé sur Python2 et non Python3. Est-ce que tu sais pourquoi?


Aucune erreur, mais la mauvaise sortie. Quand j'ai utilisé python3, je devais écrire y_new = Liste (carte (Lambda x: tuple (carte (int, x.split ('_')))). et puis cela a fonctionné.


Oh, vous essayez de vérifier les données y_new . En Python3, il retournera un objet de carte. Il libère des articles sur la demande comme un générateur. Mais votre résultat devrait être généré normalement.


J'ai mis à jour la question. Pourriez-vous jeter un oeil ici? Stackoverflow.com/Questtions/57877954/...



2
votes

Puisque vous testez une affaire par rapport à l'une des combinaisons de la liste y code>, pourquoi ne pas utiliser n'importe quel code>?

x = [2,12,33,40,500]
y = ['1_4','9_11','38_50','300_400']

y_new = [(int(a),int(b)) for i in y for a,b in zip(i.split("_"),i.split("_")[1:])]

l = {item:"Yes" if any(a<item<b for a,b in y_new) else "No" for item in x}

print (l)

#{2: 'Yes', 12: 'No', 33: 'No', 40: 'Yes', 500: 'No'}


1 commentaires

Cela fonctionnera-t-il avec de grandes listes? Par exemple, la liste X va être d'environ 3 millions de chiffres.