0

在将一些函数foo()应用于它的所有元素之后,我正在尝试从列表中创建一个不可变对象,特别是freezeset 。也就是说:

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

给定列表my_list,我想要做的是在所有元素上执行函数foo()并结果构建一个frozenset。像这样的东西:

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

我不知道有没有办法一次性做到这一点,因为如果我没记错的话,对于冻结集的创建,我们迭代列表的元素,如果我们添加迭代应用foo()函数给了我两遍,我的直觉告诉我它可以一次完成。

有没有办法通过利用迭代创建集合来做到这一点?

4

2 回答 2

1

当然,如果您想要一次通过,请使用生成器,或者在这种情况下,map非常适合:

frozenset(map(foo, my_list))

或者使用生成器,使用生成器表达式:

frozenset(foo(x) for x in my_list)
于 2020-02-12T10:30:52.933 回答
1

要么使用地图():

my_set = frozenset(map(foo, my_list))

或发电机:

my_set = frozenset(foo(x) for x in my_list)
于 2020-02-12T10:31:02.243 回答