【问题标题】:get average length of words using python reduce使用python reduce获取平均单词长度
【发布时间】:2015-04-02 13:25:21
【问题描述】:

我正在尝试使用 reduce 获取文件中单词的平均长度,但我收到以下错误“TypeError:'int' 类型的对象没有 len()”,我发现这令人费解,因为文件已被填充用单词,我只是得到每个单词的长度

def averageWord():
    myWords =  open('myfile.txt', 'r').read().split(' ')
    avg = (reduce(lambda x,y: len(x) + len(y) ,myWords)) / len(myWords)
    print avg

【问题讨论】:

  • sum() 与生成器表达式一起使用,而不是reduce。使用reduce 会变得不必要地复杂:reduce(lambda x, y: x + len(y), myWords, 0)
  • 为什么只有第二个参数调用了len,为什么最后一个参数是0?

标签: python


【解决方案1】:

reduce 函数将一次处理列表的两个元素,然后处理返回值和下一个元素。所以reduce函数的使用方式不对。引用自文档

将两个参数的函数累积应用于iterable的项,从左到右,从而将iterable减少为单个值。例如,reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) 计算 ((((1+2)+3)+4)+5)

(强调我的)

summap 一起使用是更好的方法(as mentioned

那是

avg = sum(map(len,myWords)) /len(myWords)

这将为您提供预期的平均值

【讨论】:

  • @AshwiniChaudhary 当然可以。但是OP在这里错误地使用了它! :) 就像你上面提到的,这是一个相当复杂的过程!我只是想向 OP 解释一下!
猜你喜欢
  • 1970-01-01
  • 2022-11-23
  • 1970-01-01
  • 2017-11-02
  • 2013-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-21
相关资源
最近更新 更多