小编cos*_*uke的帖子

地图与列表; 为何不同的行为?

在为Bayes'Nets程序实现"变量消除"算法的过程中,我遇到了一个意外的错误,这是一系列对象的迭代映射转换的结果.

为简单起见,我将在这里使用类似的代码:

>>> nums = [1, 2, 3]
>>> for x in [4, 5, 6]:
...     # Uses n if x is odd, uses (n + 10) if x is even
...     nums = map(
...         lambda n: n if x % 2 else n + 10, 
...         nums)
...
>>> list(nums)
[31, 32, 33]
Run Code Online (Sandbox Code Playgroud)

这绝对是错误的结果.由于[4,5,6]包含两个偶数,10因此每个元素最多应加两次.我在VE算法中也遇到了意想不到的行为,因此我修改它以在每次迭代后将迭代map器转换为a list.

>>> nums = [1, 2, 3]
>>> for x in [4, 5, 6]:
...     # Uses n if …
Run Code Online (Sandbox Code Playgroud)

python functional-programming python-3.x

13
推荐指数
2
解决办法
476
查看次数