Python将字符串列表简化为整型

v6ylcynt  于 2022-12-28  发布在  Python
关注(0)|答案(3)|浏览(95)

我有一个单词列表,我试图计算所有单词的总长度。为什么我的代码:

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()
wh6knrhe

wh6knrhe1#

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

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

输出

5
oo7oh9g9

oo7oh9g92#

如果您想使用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
vs3odd8k

vs3odd8k3#

受到@Tomerikoo评论的启发,我对reduce做了更深入的研究(aka fold)。其他语言中的许多reduce/fold实现要求操作是关联的。当操作是关联的时,应用它的顺序并不重要。例如,len(“a”)+ len(“B”)+ len(“c”)生成相同的结果,无论你把括号放在哪里(因为有限域上的整数加法是结合的)。
当运算不结合时,就会出现混淆,这时函数的应用顺序很重要,这时就出现了左折和右折的概念,它们都规定了如何添加括号。
还要注意,fold需要两个函数:将类型A的对象转换为类型B的对象的函数i和将多个类型B的对象减少为类型C的单个对象的函数ii。
左折叠和右折叠本质上使用成对运算,允许将两个功能合并为一个,这就是@Andrej Kesely的答案。

相关问题