Python 如何使用lambda计算文件中的字数?
我试图以一种非常规的方式使用Python 如何使用lambda计算文件中的字数?,python,python-3.x,file,lambda,functools,Python,Python 3.x,File,Lambda,Functools,我试图以一种非常规的方式使用reduce,lambda&readlines计算文件中的字数: import functools as ft f=open("test_file.txt") words=ft.reduce(lambda a,b:(len(a.split())+len(b.split())),f.readlines()) print(words) 当我试图拆分整数(索引)时,这会引发一个属性错误。如何让这段代码拆分由f.readlines()返回的iterable元素,并依次添加它
reduce
,lambda
&readlines
计算文件中的字数:
import functools as ft
f=open("test_file.txt")
words=ft.reduce(lambda a,b:(len(a.split())+len(b.split())),f.readlines())
print(words)
当我试图拆分整数(索引)时,这会引发一个属性错误。如何让这段代码拆分由
f.readlines()
返回的iterable元素,并依次添加它们的长度(即,这些行中的字数)以最终计算文件中的总字数?如果您试图获得文件中的字数,f.read()
比f.readlines()
更有意义,因为它避免了逐行计数求和的需要。将整个文件放在一个块中,然后可以使用split
在空白处进行拆分,而无需参数
>>> with open("foo.py") as f:
... len(f.read().split())
...
1530
如果你真的想使用readlines
,就更容易避免使用functools。在任何情况下都要减少和sum
拆分的行的长度(sum
是一个非常简洁的减少操作,在一个iterable上,它消除了分散注意力的累加器业务):
最好将与
上下文管理器一起使用,这样您的资源就会自动关闭。在所有运算符周围使用空格,以便代码可读
至于让functools.reduce
工作:它接受一个lambda,它接受累加器作为第一个参数,当前元素作为第二个参数。functools.reduce
的第二个参数是iterable,第三个参数初始化累加器。将其保留为空会将其设置为iterable中第一项的值——可能不是您想要的值,因为这样做的目的是使用累加器执行数值求和
你可以用
>>> with open("foo.py") as f:
... ft.reduce(lambda acc, line: len(line.split()) + acc, f.readlines(), 0)
...
1530
但这给我的印象是,这是一种相当鲁布的解决问题的方式。或许可以阅读文档。然后写lambda,b:a+len(b.split())
并在末尾添加一个初始值设定项,0
。
>>> with open("foo.py") as f:
... ft.reduce(lambda acc, line: len(line.split()) + acc, f.readlines(), 0)
...
1530