Python:如何使用.split命令计算句子中的平均字长?

Python:如何使用.split命令计算句子中的平均字长?,python,python-3.x,Python,Python 3.x,这里是python新手。我正在尝试编写一个程序来计算句子中的平均字长,我必须使用.split命令来完成。顺便说一句,我使用的是python 3.2 这就是我到目前为止写的 sentence = input("Please enter a sentence: ") print(sentence.split()) 到目前为止,我已经让用户输入了一个句子,它成功地拆分了每个单词 他们输入,例如:Hi my name is Bob,它将其拆分为['Hi','my','name','is','Bob']

这里是python新手。我正在尝试编写一个程序来计算句子中的平均字长,我必须使用.split命令来完成。顺便说一句,我使用的是python 3.2

这就是我到目前为止写的

sentence = input("Please enter a sentence: ")
print(sentence.split())
到目前为止,我已经让用户输入了一个句子,它成功地拆分了每个单词 他们输入,例如:Hi my name is Bob,它将其拆分为['Hi','my','name','is','Bob']

但是现在我迷路了,我不知道如何让它计算每个单词并找到句子的平均长度。

在Python 3中(您似乎正在使用):

简明版本:

average = lambda lst: sum(lst)/len(lst) #average = sum of numbers in list / count of numbers in list
avg = average([len(word) for word in sentence.split()]) #generate a list of lengths of words, and calculate average
逐步版本:

def average(numbers):
    return sum(numbers)/len(numbers)
sentence = input("Please enter a sentence: ")
words = sentence.split()
lengths = [len(word) for word in words]
print 'Average length:', average(lengths)
输出:

>>> 
Please enter a sentence: Hey, what's up?
Average length: 4
Please enter a sentence: this is a testing string
Word average = 4.0

您可能希望过滤掉标点符号以及零长度单词

>>> sentence = input("Please enter a sentence: ")
过滤掉不算数的标点符号。如果需要,可以向标点符号字符串添加更多内容:

>>> filtered = ''.join(filter(lambda x: x not in '".,;!-', sentence))
拆分为单词,并删除长度为零的单词:

>>> words = [word for word in filtered.split() if word]
并计算:

>>> avg = sum(map(len, words))/len(words)
>>> print(avg) 
3.923076923076923
mystring=“你有多大的空间啊!” 输出为3.0,我没有将拆分用作模块:

import re

def avg_word_len(s):
    words = s.split(' ') # presuming words split by ' '. be watchful about '.' and '?' below
    words = [re.sub(r'[^\w\s]','',w) for w in words] # re sub '[^\w\s]' to remove punctuations first
    return sum(len(w) for w in words)/float(len(words)) # then calculate the avg, dont forget to render answer as a float

if __name__ == "__main__":
    s = raw_input("Enter a sentence")
    print avg_word_len(s)
输出:

>>> 
Please enter a sentence: Hey, what's up?
Average length: 4
Please enter a sentence: this is a testing string
Word average = 4.0

注意:这是一个普通的用例,可以根据需要应用附加的边界条件。

我个人认为,在混合中添加lambda会使它变得不那么清晰。我同意Lennart的观点,如果函数应该有一个名称,请使用
def
而不是
lambda
,实际上我同意,但是我想为他把平均数的计算分开。哇,这很有效,谢谢!所有这些答案都很惊人,但我只是用了这个。顺便问一下,len到底做什么?引用:它返回一个对象的长度(项数)。在一个字符串中,这是字符的数量,在一个列表中,这是项目的数量等等。我怀疑这是否有帮助,甚至根本不起作用。为了说服我,请解释这是如何工作的,以及为什么它应该解决问题中描述的问题。
import re

def avg_word_len(s):
    words = s.split(' ') # presuming words split by ' '. be watchful about '.' and '?' below
    words = [re.sub(r'[^\w\s]','',w) for w in words] # re sub '[^\w\s]' to remove punctuations first
    return sum(len(w) for w in words)/float(len(words)) # then calculate the avg, dont forget to render answer as a float

if __name__ == "__main__":
    s = raw_input("Enter a sentence")
    print avg_word_len(s)
def average():
    value = input("Enter the sentence:")
    sum = 0
    storage = 0
    average = 0

    for i in range (len(value)):
        sum = sum + 1
        storage = sum
        average = average+storage

    print (f"the average is :{average/len(value)}")

    return average/len(value)

average()
s = input("Please enter a sentence: ")
avg_word_len = len(s.replace(' ',''))/len(s.split())
print('Word average =', avg_word_len)
Please enter a sentence: this is a testing string
Word average = 4.0