Python динамически создавать неизменяемый объект - PullRequest
0 голосов
/ 12 февраля 2020

Я пытаюсь создать неизменный объект, в частности frozenset , из списка после применения некоторой функции foo () ко всем его элементам. То есть:

my_list = ['a_1', 'a_2', ... , 'a_n']

учитывая список my_list , я хочу выполнить над всеми элементами функцию foo () и с В результате постройки заморозка. Примерно так:

my_list = frozenset([foo('a_1'), foo('a_2'), ... ,  foo('a_n')])

Я не знаю, есть ли способ сделать это за один проход, потому что, если я не ошибаюсь, для создания замороженного множества мы итерируем элементы списка, которые, если мы добавим итеративное применение функции foo () , дают мне два прохода, где моя интуиция подсказывает, что это можно сделать за один раз.

Есть ли способ сделать это, воспользовавшись итерацией для создания множества?

Ответы [ 2 ]

1 голос
/ 12 февраля 2020

Либо используйте карту ():

my_set = frozenset(map(foo, my_list))

или генератор:

my_set = frozenset(foo(x) for x in my_list)
1 голос
/ 12 февраля 2020

Конечно, если вы хотите один проход, используйте генератор, или в этом случае, map идеально подходит:

frozenset(map(foo, my_list))

Или с генератором, используя выражение генератора:

frozenset(foo(x) for x in my_list)
...