我正在尝试将十六进制字符列表传递给lambda函数,reduce以计算总十进制值。我不确定我做错了什么,但python解释器不会识别列表(枚举(反向(numList))作为元组列表。
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")连接到元组
更新:
代码现在正在使用一个小的添加",0"添加到lambda
reduce(lambda sum,(up,x):sum+ int(x,16)*16**up,
list(enumerate(reversed(numList))),0)
我不明白这意味着什么。此外,我不确定解决这个问题的最佳方法是什么。
这意味着你要确保它以0开头而不是第一个参数 - 在这种情况下(0,' 1') - 因为否则类型不匹配? - am2 1分钟前
您添加的第三个参数是初始化程序。没有它,第一次迭代的总和将是(0,' 1')。所以你试图评估(0,' 1')+ int(x,16)* 16 ** up,这是无效的。 - ymonad 14分钟前
更新2:
reduce(lambda sum,(up,x):sum+ int(x,16)*16**up,enumerate(reversed(numList)),0)
同样好,enumerate()
返回它,list(enumerate...)
是多余的。
将其标记为已解决。
答案 0 :(得分:2)
当您真正需要的是计算总和时,您不需要使用通用reduce
函数。
这很有效,而且非常简单:
sum( int(x,16)*16**up for up,x in enumerate(reversed(numList)) )
另外,我猜你已经知道你可以做同样的事了:
int(''.join(numList), 16)