我知道有一种方法可以让python map函数在一个命令中为多个迭代器执行,但是我一直在获取语法或值错误,或者如果它确实编译了,它就会覆盖以前的迭代或给出错误的答案。我做错什么了?在
num = ["1","2","3"]
num2 =["4","5","6"]
num3 = ["7","8","9"]
j = list(map(lambda x, y, z: int(x) and int(y) and int(z), num, num2, num3))
print(j) #[7, 8, 9]
print(reduce(lambda x, y: x+y, j)) #24
目标是将多个列表中的所有数字从字符串映射到整数,然后使用reduce()求和
j应为[1,2,3,4,5,6,7,8,9]所有整数
减少的总和应为45
更新:这种方式也不起作用
^{pr2}$
使用多个迭代器映射:
考虑到所需的中间输出,我认为
map
不是获得包含整数1-9的j
的正确工具。在这是因为具有多个迭代器的
map
同时通过迭代器:{a1}
它不会重复,那只是因为它是一个gif文件。在
你的方法存在的问题:
在第一次迭代中,它将返回
"1", "4", "7"
(每个iterable的第一个元素),下一个迭代将返回"2", "5", "8"
,最后一个迭代"3", "6", "9"
。在对于每个返回值,它将应用函数,在第一次迭代的第一个示例中
其计算结果为
^{pr2}$7
,因为这是链式and
s的最后一个真实值:这也解释了为什么结果是}:
24
,因为其他迭代的结果是8
和{在第二个示例中,添加了字符串(串联字符串),然后将其转换为整数:
解决方案:
因此,您需要第二种方法中的加法,但要像第一个示例中那样对每个变量应用
int
:更好的解决方案:
但是对于这个问题,我可能会使用不同的方法,特别是如果您想要“所需的”
j
。在要得到这个结果,您需要^{} iterables:
然后将它们全部转换为整数:
这个
chained_integers
是与您想要的[1, 2, 3, 4, 5, 6, 7, 8, 9]
列表j
等价的迭代器。如果您想再次检查,也可以在继续之前使用chained_integers = list(map(int, chained))
并打印chained_integers
。在最后,为了
reduce
,我将实际使用内置的sum
函数:或者是单行版本:
使用理解而不是
map
的替代解决方案:更简单的是理解(在本例中,我使用了生成器表达式)而不是
map
:使用生成器函数的替代解决方案:
这很简单,很容易理解,但我想再举一个例子,说明如何使用自己的生成器函数来实现:
你可以这样使用它:
在这种情况下,生成器函数并不是真的必要的(而且考虑到其他选择,可能也不可取),我只想提一下它的完整性。在
由于您希望将每个列表的元素作为一个长列表进行迭代,因此最简单的方法是将它们串联起来:
相关问题 更多 >
编程相关推荐