You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

函数式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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:40:42