注意:我不确定我是应该在这里还是在CodeGolf上问这个问题,所以我会把它贴在这里,以备不时之需。在
我尝试使用以下格式的lambdas在python中创建一个for循环:
x = 10
y = range(10)
w = 2
for g in range(w*w, x, w):
y[g] = 0
print y
这将输出正确的列表[0, 1, 2, 3, 0, 5, 0, 7, 0, 9]
。但是,我无法使用lambdas更改列表。我的代码是:
但是,这将返回[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
,这是错误的。有人知道我怎样才能做到这一点吗?我应该使用其他内置函数来生成lambda中的循环吗?我使用了this和{a2}作为参考,以防有帮助。在
下面是一个纯粹的}作为顶层{}的参数:
lambda
实现,它将w
、x
和{请注意,这样可以避免使用
__setitem__
。在可能更容易使用列表理解:
为了可读性,移到了两行,但您可以删除\和换行符,它将正常运行。在
一个警告是,这不会更改原始列表,而是返回一个新列表。在
如果您需要它来更新原始列表并返回它,可以使用短路:
^{pr2}$更正:
上面的代码只有在
range(w*w, x, w)
非空的情况下才有效,即w*w > x
,这是一个弱条件。在以下更正了此问题:
这使用了这样一个事实,即
(a or 1) and b
在计算a
的值之后,总是计算b
。在使用
map
作为副作用是令人讨厌的,但是:一种不那么令人反感的方法是使用切片分配
^{pr2}$相关问题 更多 >
编程相关推荐