是否可以使用集合操作进行Python-Set-Comprehension?

时间:2018-04-13 19:31:28

标签: python set set-comprehension

这是我的代码。

set([1, 2, 3, 4, 5])

返回f(x) = L / (1 + e^(-k(x-x0))) where e = the natural logarithm base (also known as Euler's number), x0 = the x-value of the sigmoid's midpoint, L = the curve's maximum value, and k = the steepness of the curve.

在这种情况下是否可以使用set comprehension?我怎么能写得更短?

2 个答案:

答案 0 :(得分:8)

选项1
set.union
为什么你需要一个循环?使用set.union,它允许您一次计算两个以上集合(容器)的并集。

>>> set.union(*[{1,2}, {3,4}, {5,1}])
{1, 2, 3, 4, 5}

我说“容器”,因为第二个(以及之后的)参数根本不需要设置。

>>> set.union(*[{1,2}, [3,4], [5,1]])
{1, 2, 3, 4, 5}

然而,第一个需要。可替代地,

>>> set().union(*[[1,2], [3,4], [5,1]])
{1, 2, 3, 4, 5}

在设置对象(而不是类)上调用union时,不需要设置任何参数。

选项2
functools.reduce
如果这不符合您的口味,那么reduce也是如此。

>>> from functools import reduce
>>> reduce(set.union, [{1,2}, {3,4}, {5,1}])
{1, 2, 3, 4, 5}

执行成对缩减,累积结果。然而,并不像第一个选项那么好。

答案 1 :(得分:3)

如果你真的想要一个集合理解:

lst = [{1,2}, {3,4}, {5,1}]
{elem for set_ in lst for elem in set_}