【问题标题】:find the longest word and the largest number in a text file查找文本文件中最长的单词和最大的数字
【发布时间】:2020-01-14 20:02:27
【问题描述】:

所以我现在正在学习 python,我真的需要你的帮助。 例如,您确实有随机文本文件,其中包含单词和数字。 你需要在这个文件中找到最长的单词和最大的数字。 上半场我搞定了,我找到了最长的一个字:

def longest_word(word):
    with open(word, 'r') as infile:
        words = infile.read().split()
    max_len = len(max(words, key=len))
    return [word for word in words if len(word) == max_len]
print (("the longest word is :"), longest_word ('text.txt'))

你能帮我完成第二部分吗?如何找到文件中的最大数量?

【问题讨论】:

  • 我建议使用正则表达式将单词与数字分开,然后找到两者的最大值。
  • 这些数字是非负整数、整数还是浮点数?
  • 它们是整数

标签: python python-3.x file


【解决方案1】:

您可以实现错误处理并尝试将 str 解析为 int: "2" --> 2

def longest_integer(word):
    max_int = 0
    with open(word, 'r') as infile:
        words = infile.read().split()
    for word in words:
        try:
            int_val = int(word)
            if int_val > max_int:
                max_int = int_val
        except:
            pass
    return max_int
print (("the longest integer is :"), longest_integer ('text.txt'))

【讨论】:

    【解决方案2】:

    你快到了!您可以检查每个单词以查看它是否实际上是一个整数,然后检查该值是否大于前一个最大值。 假设目标是找到最大的整数

    for word in words:
        try:
            if int(word) > MAX_INT:
                MAX_INT = word
        except:
            pass
    

    【讨论】:

    • 顺便说一句,我很确定每次循环时word 永远只会是str
    • @quamrana int('Hello 5 World'.split()[1]) 给出 5,为什么你认为上面的只会是 str?
    • @Gocht 这也行。 “请求宽恕胜过许可”
    • 我认为@quamrana 指的是这个案例isinstance('5', int)(使用你的例子)
    • 好收获。编辑使用 try/except
    【解决方案3】:
    with open(word, 'r') as infile:
        data = infile.read()
        nums = [int(num) for num in re.findall('\d+', data)
        max_num = max(nums)
    

    【讨论】:

      【解决方案4】:

      由于数字是整数,您可以使用str 的方法isdigit 获取它们,请考虑以下示例:

      words = ['abc', '123', 'xyz', '1', '999']
      numbers = [i for i in words if i.isdigit()]
      print(numbers)  # ['123', '1', '999']
      

      那么您可以通过以下方式提供maxint 作为key

      print(max(numbers, key=int))  # 999
      

      记住不要比较代表数字的strs,因为它可能会产生令人惊讶的结果,例如:

      print(max(['9000','999']))  # 999
      

      请注意,如果原始列表 (words) 不包含任何数字,则会出现 ValueError

      编辑:我忘了注意以上仅适用于非负整数,也允许负整数,您可以编写如下检查函数:

      def represent_int(x):
          if not x:  # empty str
              return False
          if x[0] == '-':  # leading - that is negative integer
              return x[1:].isdigit()
          return x.isdigit()
      

      并按如下方式使用:

      numbers = [i for i in words if represent_int(i)]
      

      请注意,我假设 represent_int 将仅由 strs 提供。

      【讨论】:

        猜你喜欢
        • 2013-04-28
        • 1970-01-01
        • 1970-01-01
        • 2021-10-31
        • 2018-09-28
        • 2022-01-03
        • 1970-01-01
        • 2015-12-11
        • 1970-01-01
        相关资源
        最近更新 更多