Python:从列表到枚举列表传递到lambda reduce函数

Python:从列表到枚举列表传递到lambda reduce函数,python,list,enumeration,Python,List,Enumeration,我试图将十六进制字符列表传递到lambda函数中,并通过reduce计算总的十进制值。我不确定我做错了什么,但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))) [(0, '

我试图将十六进制字符列表传递到lambda函数中,并通过reduce计算总的十进制值。我不确定我做错了什么,但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)))
  [(0, '1'), (1, 'e'), (2, 'f'), (3, 'e'), (4, '0'), (5, '3')]
当我打印出来的时候

  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)))
  [(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分钟前


您添加的第三个参数是initializer。如果没有它,第一次迭代中的和将是(0,'1')。因此您尝试计算(0,'1')+int(x,16)*16**up,这是无效的。-14分钟前的ymonad

更新2:

reduce(lambda sum,(up,x):sum+ int(x,16)*16**up,enumerate(reversed(numList)),0)
同样好,
enumerate()
返回iter,
list(enumerate…
是冗余的


将其标记为已解决。

当您真正需要的只是计算总和时,不需要使用通用的
reduce
函数

这样做有效且简单得多:

sum( int(x,16)*16**up for up,x in enumerate(reversed(numList)) )

另外,我猜你已经知道你可以做完全相同的事情,像这样:

int(''.join(numList), 16)

您添加的第三个参数是初始值设定项。如果没有它,第一次迭代中的
和将是
(0,'1')
。因此,您试图计算
(0,'1')+int(x,16)*16**up
,这是无效的。啊,好的。消息是说我正在尝试将int添加到元组中。(我正以另一种方式思考。)我现在知道了,谢谢。这意味着您要确保它以0开头,而不是第一个参数-在本例中是(0,'1')-因为否则类型不匹配?一个简单的问题,这是
enumerate(list)吗
在使用lambda函数时提取列表索引的正确方法?我还有哪些其他选项?我添加了Pham的答案,您打算将其标记为正确答案。感谢您提供的提示。我实际上正在探索如何正确使用lambda函数。如果没有其他更好的答案,我将接受此作为最终答案。