Python: 从列表到枚举列表传递给 lambda reduce 函数
Python: from list to enumerated list to pass to lambda reduce function
我正在尝试将十六进制字符列表传递到 lambda 函数中,减少以计算总十进制值。我不确定我做错了什么,但是 python 解释器不会将 list(enumerate(reversed(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")连接到元组
更新:
代码现在可以使用添加到 lambda 的小添加“,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()
returns iter 和 list(enumerate...)
是多余的。
标记为已解决。
当您真正需要的只是计算总和时,您不需要使用通用 reduce
函数。
这行得通而且简单得多:
sum( int(x,16)*16**up for up,x in enumerate(reversed(numList)) )
此外,我猜你已经知道你可以像这样做完全相同的事情:
int(''.join(numList), 16)
我正在尝试将十六进制字符列表传递到 lambda 函数中,减少以计算总十进制值。我不确定我做错了什么,但是 python 解释器不会将 list(enumerate(reversed(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")连接到元组
更新:
代码现在可以使用添加到 lambda 的小添加“,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()
returns iter 和 list(enumerate...)
是多余的。
标记为已解决。
当您真正需要的只是计算总和时,您不需要使用通用 reduce
函数。
这行得通而且简单得多:
sum( int(x,16)*16**up for up,x in enumerate(reversed(numList)) )
此外,我猜你已经知道你可以像这样做完全相同的事情:
int(''.join(numList), 16)