如何修复代码中的 lambda 和 map 函数?
how to fix lambda and map functions in my code?
我想创建一组可以除以特定数字的值。在我下面的代码中,我想要数字 12 的因子。
x=12
a=set(map(lambda i:i if(x%i==0),range(1,x+1)))
print(a)
我预计输出为 {1,2,3,4,6,12}。
但我遇到了一些错误:
File "<ipython-input-18-7f73bd4c5148>", line 2
a=set(map(lambda i:i if(x%i==0),range(1,x+1)))
^
SyntaxError: invalid syntax
我认为你的 lambda 应该是 lambda i : x%i==0
。你现在拥有的没有意义。我认为你应该使用 filter
而不是 map
.
>>> x = 12
>>> a = set(filter(lambda i:x%i==0, range(1,x+1)))
>>> print(a)
{1, 2, 3, 4, 6, 12}
您似乎混淆了 lambda
符号和 list/set 理解符号。使用 lambda
和 filter
(不是 map
)的正确方法已经显示,所以这里有一个使用集合理解的版本:
>>> x = 12
>>> {i for i in range(1, x+1) if x % i == 0}
{1, 2, 3, 4, 6, 12}
如您所见,i if ...
出现在这里(尽管分布在表达式的不同部分),但不在 lambda
.
中
尝试
a=set(filter(lambda i: True if(x%i==0) else False,range(1,x+1)))
lambda 函数中的条件应按照此处的说明进行定义:
Conditional statement in a one line lambda function in python?
我建议使用生成器或函数而不是 lambda,因为它们不 PEP-8 兼容并且通常会使逻辑更复杂。如果您要制作很长的序列,使用生成器还可以节省内存。
示例生成器
gen = (x for x in range(1, 1000000000) if 12 % x == 0)
我想创建一组可以除以特定数字的值。在我下面的代码中,我想要数字 12 的因子。
x=12
a=set(map(lambda i:i if(x%i==0),range(1,x+1)))
print(a)
我预计输出为 {1,2,3,4,6,12}。
但我遇到了一些错误:
File "<ipython-input-18-7f73bd4c5148>", line 2
a=set(map(lambda i:i if(x%i==0),range(1,x+1)))
^
SyntaxError: invalid syntax
我认为你的 lambda 应该是 lambda i : x%i==0
。你现在拥有的没有意义。我认为你应该使用 filter
而不是 map
.
>>> x = 12
>>> a = set(filter(lambda i:x%i==0, range(1,x+1)))
>>> print(a)
{1, 2, 3, 4, 6, 12}
您似乎混淆了 lambda
符号和 list/set 理解符号。使用 lambda
和 filter
(不是 map
)的正确方法已经显示,所以这里有一个使用集合理解的版本:
>>> x = 12
>>> {i for i in range(1, x+1) if x % i == 0}
{1, 2, 3, 4, 6, 12}
如您所见,i if ...
出现在这里(尽管分布在表达式的不同部分),但不在 lambda
.
尝试
a=set(filter(lambda i: True if(x%i==0) else False,range(1,x+1)))
lambda 函数中的条件应按照此处的说明进行定义: Conditional statement in a one line lambda function in python?
我建议使用生成器或函数而不是 lambda,因为它们不 PEP-8 兼容并且通常会使逻辑更复杂。如果您要制作很长的序列,使用生成器还可以节省内存。
示例生成器
gen = (x for x in range(1, 1000000000) if 12 % x == 0)