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

时间:2016-10-21 06:18:19

标签: python list enumeration

我正在尝试将十六进制字符列表传递给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...)是多余的。

将其标记为已解决。

1 个答案:

答案 0 :(得分:2)

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

这很有效,而且非常简单:

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

另外,我猜你已经知道你可以做同样的事了:

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