【问题标题】:Python: How can I calculate the average word length in a sentence using the .split command?Python:如何使用 .split 命令计算句子中的平均词长?
【发布时间】:2012-10-06 16:24:28
【问题描述】:

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

这是我到目前为止写的内容

sentence = input("Please enter a sentence: ")
print(sentence.split())

到目前为止,我让用户输入了一个句子,它成功地拆分了每个单词 他们输入,例如:嗨,我的名字是 Bob,它将其拆分为 ['hi', 'my', 'name', 'is', 'bob']

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

【问题讨论】:

    标签: python python-3.x


    【解决方案1】:
    >>> sentence = "Hi my name is Bob"
    >>> words = sentence.split()
    >>> sum(map(len, words))/len(words)
    2.6
    

    【讨论】:

      【解决方案2】:

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

      >>> sentence = "Hi my name is Bob"
      >>> words = sentence.split()
      >>> average = sum(len(word) for word in words) / len(words)
      >>> average
      2.6
      

      【讨论】:

      • 哇,它成功了,谢谢!所有这些答案都很棒,但我只使用了这个。顺便说一句,len 到底是做什么的?
      • 引用the docs:返回对象的长度(项目数)。在字符串中是字符数,在列表中是项目数等。
      【解决方案3】:

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

      >>> 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
      

      【讨论】:

        【解决方案4】:
        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()
        

        【讨论】:

        • 我怀疑这是否有帮助,甚至根本没有用。为了说服我,请解释它是如何工作的以及为什么它应该解决问题中描述的问题。
        【解决方案5】:

        简洁版:

        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
        

        【讨论】:

        • 就个人而言,我认为在混合中添加一个 lambda 会使其不太清晰。
        • 我同意 Lennart 的观点,如果函数值得命名,请使用 def 而不是 lambda
        • 其实我同意,但是我想单独为他计算平均值。
        【解决方案6】:
        def main():
        
            sentence = input('Enter the sentence:  ')
            SumAccum = 0
            for ch in sentence.split():
                character = len(ch)
                SumAccum = SumAccum + character
        
            average = (SumAccum) / (len(sentence.split()))
            print(average)
        

        【讨论】:

          【解决方案7】:
            def averageWordLength(mystring):
          tempcount = 0
          count = 1
          
          wordcount = 0
          try:
              for character in mystring:
                  if character == " ":
                      tempcount +=1
                      if tempcount ==1:
                          count +=1
          
                  else:
                      tempcount = 0
                      try:
                          if character.isalpha(): #sorry for using the .isalpha
                              wordcount += 1
                      except:
                          wordcount = wordcount + 0
              if mystring[0] == " " or mystring.endswith(" "): #i'm sorry for using the .endswith
                      count -=1
          
              try:
                  result = wordcount/count
                  if result == 0:
                      result = "No words"
                      return result
                  else:
                      return result
          
              except ZeroDivisionError:
                  error = "No words"
                  return error
          
          except Exception:
              error = "Not a string"
              return error
          

          mystring = "你有多大的空间!" 输出是3.0,我没有使用split

          【讨论】:

            【解决方案8】:

            作为模块化:

            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)
            

            【讨论】:

              【解决方案9】:
              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
              

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

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2013-06-12
                • 1970-01-01
                • 1970-01-01
                • 2020-09-28
                • 2016-05-21
                • 2012-12-07
                • 1970-01-01
                相关资源
                最近更新 更多