这是我的代码。
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?我怎么能写得更短?
答案 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_}