我需要数一个句子中的单词。例如,“我遛狗”。将是 4 个单词,但“我遛 3 条狗”只有 4 个单词,因为数字不是单词。该代码只能计算字母单词。我了解如何通过简单地使用以下内容来计算单词:
len(string.split)
但这不考虑数字。有没有一种简单的方法(对于初学者)来解释数字、符号等?谢谢你。
totalWords = sum(1 for word in line.split() if word.isalpha())
您可以使用split
行上的函数根据空格将其拆分。isalpha
然后使用函数检查每个单词是否只有字母。如果为真,则包括 1。最后将所有这些相加。
这是另一种选择:
import re
lines = [
'I walk by dog',
'I walk my 3 dogs',
'I walk my Beagle-Harrier' # DSM's example
]
for line in lines:
words = re.findall('[a-z-]+', line, flags=re.I)
print line, '->', len(words), words
# I walk by dog -> 4 ['I', 'walk', 'by', 'dog']
# I walk my 3 dogs -> 4 ['I', 'walk', 'my', 'dogs']
# I walk my Beagle-Harrier -> 4 ['I', 'walk', 'my', 'Beagle-Harrier']
您可以.isalpha()
在字符串上使用。
len([word for word in sentence.split() if word.isalpha()])
因为,由于评论看起来他想要一些不使用 .isalpha 的东西,我们可以在 try/except 中运行它。
count = 0
for word in line.split():
try:
int(word)
except ValueError:
count += 1
我知道它不漂亮,但它处理得当。
如果你不想使用.isalpha
sum(not word.isdigit() for word in line.split())
这将为True
每个不是数字False
的单词和每个数字的单词返回。这段代码利用了在 python 中,True == 1
and False == 0
,所以你会得到非数字单词的数量。
int
如果您对使用 s 的-ness感到不舒服bool
,您可以通过添加该函数使其对代码的读者明确int
(这 100% 不需要,但如果您喜欢这样可以使代码更清晰)
sum(int(not word.isdigit()) for word in line.split())