我需要在一个句子中计算单词。例如,“我遛狗”。将是4个单词,但“我走我的3只狗”只会是4个单词,因为数字不是单词。代码只能计算字母单词。我理解如何通过简单地使用以下内容来计算单词:
len(string.split)
但这不包括数字。是否有一种简单的方法(对于初学者)来说明数字,符号等?谢谢。
答案 0 :(得分:3)
totalWords = sum(1 for word in line.split() if word.isalpha())
您可以在该行上使用split
函数根据空格拆分它。然后使用isalpha
函数检查每个单词是否只有字母表。如果是,那么包括1.最后总结所有这些。
答案 1 :(得分:2)
这是另一种选择:
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']
答案 2 :(得分:1)
您可以在字符串上使用.isalpha()
。
len([word for word in sentence.split() if word.isalpha()])
答案 3 :(得分:0)
如果您不想使用.isalpha
sum(not word.isdigit() for word in line.split())
对于每个不是数字的单词,这将返回True
;对于每个单词,这将返回False
。此代码利用了python True == 1
和False == 0
中的事实,因此您将获得非数字的数量。
如果您对使用int
的{{1}} - 感到不舒服,可以通过添加bool
函数向代码的读者明确说明(这是100%)不需要,但如果您喜欢那样可以使代码更清晰)
int
答案 4 :(得分:0)
由于评论看起来他想要一些不使用.isalpha的东西,我们可以在try / except中运行它。
count = 0
for word in line.split():
try:
int(word)
except ValueError:
count += 1
我知道它不漂亮,但它正确处理它。