Comme par Le Zen de Python (si vous vous demandez si votre code est "Pythonic", qui est l'endroit où aller):
- La belle est mieux que laid.
- Explicite est mieux qu'implicites.
- Simple est mieux que complexe.
- L'appartement est mieux que imbriqués.
- La lisibilité des comptes.
Le Pythonic de manière à obtenir des sorted
intersection
deux set
s est:
>>> sorted(set(a).intersection(xyz))
[0, 4, 6, 7, 9]
Ou les éléments qui sont xyz
mais pas en a
:
>>> sorted(set(xyz).difference(a))
[12, 242]
Mais pour une plus compliqué boucle vous pouvez aplatir par une itération sur un bien-nommé générateur d'expression et/ou l'appel à une fonction nommée. Essayer de tout faire rentrer sur une seule ligne est rarement "Pythonic".
Mise à jour des commentaires suivants à propos de votre question et de la accepté de répondre à
Je ne suis pas sûr de ce que vous essayez de faire avec enumerate
, mais si l' a
est un dictionnaire, vous voudrez probablement utiliser les touches, comme ceci:
>>> a = {
... 2: 'Turtle Doves',
... 3: 'French Hens',
... 4: 'Colly Birds',
... 5: 'Gold Rings',
... 6: 'Geese-a-Laying',
... 7: 'Swans-a-Swimming',
... 8: 'Maids-a-Milking',
... 9: 'Ladies Dancing',
... 0: 'Camel Books',
... }
>>>
>>> xyz = [0, 12, 4, 6, 242, 7, 9]
>>>
>>> known_things = sorted(set(a.iterkeys()).intersection(xyz))
>>> unknown_things = sorted(set(xyz).difference(a.iterkeys()))
>>>
>>> for thing in known_things:
... print 'I know about', a[thing]
...
I know about Camel Books
I know about Colly Birds
I know about Geese-a-Laying
I know about Swans-a-Swimming
I know about Ladies Dancing
>>> print '...but...'
...but...
>>>
>>> for thing in unknown_things:
... print "I don't know what happened on the {0}th day of Christmas".format(thing)
...
I don't know what happened on the 12th day of Christmas
I don't know what happened on the 242th day of Christmas