Python将字符串列表缩减为int



我有一个单词列表,我正在尝试计算所有单词组合的总长度。为什么是我的代码:

words = ["a", "ab", 'adsf']                                             

wordlen = reduce(lambda x, y: len(x) + len(y), words) 

给我:

Traceback (most recent call last)
wordlen = reduce(lambda x, y: len(x) + len(y), words)
TypeError: object of type 'int' has no len()

下面是一个稍微不同的解决问题的方法:

words = ['zz','abc']
total_len = sum(len(x) for x in words)
print(total_len)

输出

5

如果要使用reduce,请使用初始值设定项参数并删除第一个len():

from functools import reduce
words = ['Hello', 'World', 'This', 'Is', 'Example']
wordlen = reduce(lambda x, y: x + len(y), words, 0)
print(wordlen)

打印:

23

受@Tomerikoo评论的启发,我对reduce(又名fold(进行了更深入的研究。其他语言中的许多reduce/fold实现都要求操作是关联的。如果操作是关联的,则应用该操作的顺序无关紧要。例如,无论你把括号放在哪里,len("a"(+len(("b"(+len("c"(都会产生相同的结果(因为有限域上的整数加法是关联的(。

当操作不关联时,就会发生混淆。在这种情况下,函数的应用顺序很重要。这就是左折叠和右折叠的概念出现的时候。它们都是规定如何添加括号的方式。

还要注意,fold需要两个功能:函数i,用于将类型A的对象转换为另一个类型B的对象,以及Functoin ii,将多个B类对象简化为一个C类对象。

左折叠和右折叠本质上使用成对操作,这允许将两个函数组合为一。这就是@Andrej Kesely的答案。

相关内容

  • 没有找到相关文章

最新更新