函数式Python实现:多行文本读取与带标点唯一单词统计问题
解决Python函数式统计带标点唯一单词数的问题
嘿,我来帮你搞定这个问题!你遇到的核心问题是替换readline()为read()后,原正则表达式的匹配逻辑没有覆盖所有空白场景,导致结果不符合预期。咱们一步步来修正:
原代码的问题
原代码用[^ \n]+作为匹配规则,它只排除了空格和换行符,但没有考虑其他空白字符(比如制表符\t、换页符\f等)。当用sys.stdin.read()读取全部输入时,如果文本里有这些特殊空白,会被当成单词的一部分,导致错误的匹配结果。另外,[^ \n]+的写法也不够简洁通用。
修正后的代码
我们可以用正则表达式里的\S+来替代,它能匹配所有非空白字符的连续序列,完美符合你“带标点的单词算独立项”的需求,同时支持读取全部输入内容:
import sys import re print(len(set(re.findall(r'\S+', sys.stdin.read()))))
代码解释
sys.stdin.read():一次性读取所有输入内容(不管多少行),解决了原代码只能处理单行的限制。re.findall(r'\S+', ...):找出所有非空白字符的连续片段,比如word,、word?都会被当成独立的匹配项,完全符合你的要求。set(...):自动去重,得到所有唯一的带标点单词集合。len(...):统计集合的长度,就是你要的唯一单词数量。
验证示例
拿你给出的示例输入"word word, word word?"来说,这段代码会匹配到['word', 'word,', 'word', 'word?'],转成集合后是{'word', 'word,', 'word?'},长度为3,和预期结果一致。
内容的提问来源于stack exchange,提问作者los78
相关产品推荐
相关产品推荐

