我想通过一个十六进制字符的列表,进入一个lambda函数,减少计算一个总的十进制值。我不知道我在做什么错,但Python解释器将不能识别列表(枚举(逆转(numList))元组的列表。Python:从列表到枚举列表传递给lambda reduce函数
numList = ['3', '0', 'e', 'f', 'e', '1']
reduce(lambda sum,(up,x):sum+ int(x,16)*16**up,
enumerate(reversed(numList)))
当我打印出来
list(enumerate(reversed(numList))
这是一个元组列表
[(0, '1'), (1, 'e'), (2, 'f'), (3, 'e'), (4, '0'), (5, '3')]
但它吐了错误:只能串联元组(而不是“INT”),以元组
UPDATE:
的代码现在与未成年人除了” 0" 的工作加入到拉姆达
reduce(lambda sum,(up,x):sum+ int(x,16)*16**up,
list(enumerate(reversed(numList))),0)
我不明白是什么意思。另外我不确定什么是最好的方法来解决这个问题。
that means you make sure, that it starts with 0 instead of the first Argument - in this case (0,'1') - because otherwise the types dont match? – am2 1 min ago
。
the third argument you add is initializer. without it, the sum in first iteration will be (0,'1'). so you were trying to evaluate (0,'1')+int(x,16)*16**up which is invalid. – ymonad 14 mins ago
更新2:
reduce(lambda sum,(up,x):sum+ int(x,16)*16**up,enumerate(reversed(numList)),0)
是一样的好,enumerate()
回报ITER和list(enumerate...)
是多余的。
标记为已解决。
第三你添加的参数是初始值设定项。没有它,第一次迭代中的'sum'将是'(0,'1')'。所以你试图评估无效的'(0,'1')+ int(x,16)* 16 ** up'。 https://docs.python.org/2/library/functions.html#reduce – ymonad
啊好的。该消息是说我正在尝试将int添加到元组中。 (我在想另一种方式。)我现在明白了,谢谢。 – theMobDog
这意味着你要确保它以0开头而不是第一个参数 - 在这种情况下(0,'1') - 因为否则类型不匹配? – am2