Согласно Zen of Python (если вам интересно, является ли ваш код "Pythonic", это то место, куда можно пойти):
- Красиво лучше, чем безобразно.
- Явное лучше, чем неявное.
- Простое лучше, чем сложное.
- Плоское лучше, чем вложенное.
- Читаемость имеет значение.
Пифонический способ получения sorted
intersection
из двух set
s:
>>> sorted(set(a).intersection(xyz))
[0, 4, 6, 7, 9]
Или те элементы, которые xyz
, но не в a
:
>>> sorted(set(xyz).difference(a))
[12, 242]
Но для более сложного цикла вы можете захотеть сгладить его, выполнив итерацию по хорошо названному выражению генератора и / или вызов хорошо названной функции.Попытка поместить все в одну строку редко бывает "пифонической".
Обновите после дополнительных комментариев на ваш вопрос и принятого ответа
Я не уверен, что вы пытаетесь сделатьс enumerate
, но если a
является словарем, вы, вероятно, захотите использовать ключи, например так:
>>> 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