Как найти минимальное число в файле питон

Improve Article

Save Article

Like Article

  • Read
  • Discuss
  • Improve Article

    Save Article

    Like Article

    Given a  text file, write a Python program to find the smallest number in the given text file.

    Examples:

    Input: gfg.txt
    Output: 9
    
    Explanation: 
    Contents of gfg.txt: I live at 624 Hyderabad.
    My mobile number is 52367. My favourite number is 9.
    Numbers present in the text file are 9,624,52367
    Minimum number is 9.

    Approach:

    • Create a file object using the open function and pass the filename as parameter.
    • Read the contents in the file using readlines() function.
    • For each line in the file, Using regex find all integers present in that line.
    • Create a result variable to store the final answer.
    • If a number in a line is less than the current result then update the result.
    • Close the file object.
    • Return the result.

    Below is the implementation of the above approach.

    Python3

    import math

    import re

    def findMinimumElement(fileName):

        file = open(fileName, 'r')

        lines_in_file = file.readlines()

        result = math.inf

        for line in lines_in_file:

            nums = list(map(int, re.findall('[0-9]+', line)))

            for i in nums:

                result = min(result, i)

        file.close()

        return result

    with open("gfg.txt", "w") as file:

        g

        file.write(

            "I live at 624 Hyderabad.

            My mobile number is 52367.

            My favourite number is 9.")

    print('Smallest number in the file is:',

          findMinimumElement('gfg.txt'))

    Output:

    Smallest number in the file is: 9

    Complexity analysis:

    Time complexity: O(n)
    Auxiliary Space: O(n)

    Method : Using sort() method

    Python3

    import math

    import re

    def findMinimumElement(fileName):

        file = open(fileName, 'r')

        lines_in_file = file.readlines()

        result = math.inf

        for line in lines_in_file:

            nums = list(map(int, re.findall('[0-9]+', line)))

            nums.sort()

            result=nums[0]

        file.close()

        return result

    with open("gfg.txt", "w") as file:

        file.write(

            "I live at 624 Hyderabad.

            My mobile number is 52367.

            My favourite number is 9.")

    print('Smallest number in the file is:',findMinimumElement('gfg.txt'))

    Output

    Smallest number in the file is: 9

    Complexity analysis:

    N is the number of words.

    Time complexity: O(n)
    Auxiliary Space: O(n)

    Last Updated :
    19 Jan, 2023

    Like Article

    Save Article

    New_user4

    1 / 1 / 0

    Регистрация: 09.11.2019

    Сообщений: 86

    1

    Найти минимальное число в файле

    16.10.2020, 08:56. Показов 5572. Ответов 5

    Метки нет (Все метки)


    Студворк — интернет-сервис помощи студентам

    Python
    1
    2
    3
    4
    5
    6
    7
    8
    
    f = open('input.txt', 'r')
    for i in range(14):
        a, b = map(int, f.read().split())
    mini = min(b)
    f.close()
    f = open('output.txt', 'w')
    f.write(str(mini))
    f.close()

    Помогите исправить
    Ошибка RE
    На входе 14 строк
    Через пробел порядковый номер и число
    Надо найти минимальное число



    0



    Модератор

    Эксперт Python

    2870 / 1572 / 509

    Регистрация: 21.02.2017

    Сообщений: 4,197

    Записей в блоге: 1

    16.10.2020, 09:03

    2

    New_user4, расскажи алгоритм своей программы.



    0



    1303 / 843 / 409

    Регистрация: 12.03.2018

    Сообщений: 2,305

    16.10.2020, 09:08

    3

    ваша задача

    Добавлено через 3 минуты

    Цитата
    Сообщение от New_user4
    Посмотреть сообщение

    for i in range(14):
        a, b = map(int, f.read().split())

    сначала прочитайте текст, а уже потом используйте цикл



    0



    New_user4

    1 / 1 / 0

    Регистрация: 09.11.2019

    Сообщений: 86

    16.10.2020, 09:15

     [ТС]

    4

    Python
    1
    
     a, b = map(int, f.read().split())

    — порядковый номер и число

    Python
    1
    
    for i in range(14):

    14 строк

    Python
    1
    
    mini = min(b)

    минимальное число ищу

    Python
    1
    
    f.write(str(mini))

    вывожу мини минимальное число
    надо именно файловым вводом выводом

    Добавлено через 4 минуты
    а как вывести тогда 14 строк?



    0



    ioprst

    1303 / 843 / 409

    Регистрация: 12.03.2018

    Сообщений: 2,305

    16.10.2020, 09:29

    5

    Python
    1
    2
    
    text = f.read()
    print(text)



    0



    Vigi

    628 / 468 / 179

    Регистрация: 28.05.2012

    Сообщений: 1,399

    16.10.2020, 10:01

    6

    Python
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    with open('input.txt', encoding='utf-8') as f:
        base = f.readlines()
     
    lst = []
    for item in base:
        print(k := item.strip())
        lst.append(int(k[1:]))
     
    print()
    print(f'min = {min(lst)}')

    Добавлено через 6 минут
    чуть короче:

    Python
    1
    2
    3
    4
    5
    6
    7
    8
    
    lst = []
    with open('input.txt', encoding='utf-8') as f:
        for item in f.readlines():
            print(k := item.strip())
            lst.append(int(k[1:]))
     
    print()
    print(f'min = {min(lst)}')



    0



    from itertools import tee
    from operator import itemgetter
    import csv
    
    
    with open('base.txt', 'r') as csvfile:
        reader = csv.reader(csvfile, delimiter='|')
        payload_it = filter(len, reader)  # Выкидываем пустые строки (csv их вообще не должен содержать)
        min_it, max_it = tee(payload_it, 2)  # Разделяем один поток на 2 независимых
        key = itemgetter(1)  # Ключ для выбора минимума, максимума (то же самое, что и item[1])
        print(min(min_it, key=key), max(max_it, key=key))
    

    Файл прочитается всего 1 раз, получите минимум и максимум (лексикографический) по второму столбцу.

    Но это тоже плохой вариант, потому что в памяти будет храниться 2 копии содержимого файла (минимум и максимум ищутся в этих копиях). Поэтому лучше завести какие-то minimum, maximum значения и просто обновлять их при одном итерировании по файлу. Решение лучше я описал, но реализовывать его мне лень :)


    Вариант с одним проходом и нахождением минимума максимума за проход без хранения всего содержимого файла в памяти на каком-либе из этапов:

    from operator import itemgetter
    import csv
    
    
    def min_max(*args, key=lambda x: x):
        """
        Возвращает наименьший и наибольший элементы в итерируемом объекте
        или наименьший и наибольший из двух или более аргументов.
    
        :param args: Множество аргументов или один итерируемый
        :param key: Ключ, по которому будет выполняться сравнение
        :return: Наименьший и наибольший элементы
        """
        if len(args) == 1:
            iterable = args[0]
        else:
            iterable = args
    
        it = iter(iterable)
    
        try:
            min = max = next(it)
            min_key, max_key = map(key, (min, max))
        except StopIteration:
            raise ValueError('Empty sequence')
    
        for item in it:
            keyed = key(item)
            if keyed < min_key:
                min = item
                min_key = keyed
            if keyed > max_key:
                max = item
                max_key = keyed
    
        return min, max
    
    
    if __name__ == '__main__':
        with open('base.txt', 'r') as csvfile:
            reader = csv.reader(csvfile, delimiter='|')
            payload_it = filter(len, reader)  # Выкидываем пустые строки (csv их вообще не должен содержать)
            print(min_max(payload_it, key=itemgetter(1)))
    
    

    Пока мой код находит наибольшее число в текстовом файле, но он не находит наименьшее число, когда он запускает наименьшее число, все равно 0, а самый большой — 9997.

        integers = open('numbers.txt', 'r') # opens numbers.txt
    
    largestInt = 0 # making variables to store the largest/smallest int
    smallestInt = 0
    
    # loop where we check every line for largest/smallest int
    for line in integers:
        while largestInt <= line.strip():
            largestInt = line
        while smallestInt >= line.strip():
            smallestInt = line
    
    # print results
    print "Smallest = ", smallestInt
    print "Largest = ", largestInt
    

    numbers.txt выглядит следующим образом:

    6037
    -2228
    8712
    -5951
    9485
    8354
    1467
    8089
    559
    9439
    -4274
    9278
    -813
    1156
    -7528
    1843
    -9329
    574
    

    и т.д.

    Что здесь не так? Если я делаю что-то неправильно, или логика неверна, пожалуйста, исправьте меня.

    EDIT

    Я хотел бы поблагодарить @Martijn Pieters и @Gexos за то, что объяснил, что я делаю неправильно. Я понимаю, почему мой код работает сейчас!

    Окончательный код:

    integers = open('numbers.txt', 'r') # opens numbers.txt
    
    largestInt = 0 # making variables to store the largest/smallest int
    smallestInt = 0
    
    # loop where we check every line for largest/smallest int
    for line in integers:
        if largestInt <= int(line.strip()): # converted a string into an int
            largestInt = int(line.strip()) # made that int into largestInt
        if smallestInt >= int(line.strip()): # converted a string into an int
            smallestInt = int(line.strip()) # made that int into smallestInt
    
    integers.close() # closes the file
    
    # print results
    print "Smallest = ", smallestInt
    print "Largest = ", largestInt
    

    Результаты

    Smallest =  -9993
    Largest =  9997
    

    20 янв. 2014, в 21:10

    Поделиться

    Источник

    8 ответов

    Вы сравниваете строки, а не целые числа; перед тем, как сравнивать: превратите свою строку в целое число:

    largestInt = float('-inf')
    smallestInt = float('inf')
    
    for line in integers:
        number = int(line)
        if largestInt < number:
            largestInt = number
        if smallestInt > number:
            smallestInt = number
    

    Обратите внимание, что вы хотите использовать if здесь, а не while; последний создает цикл.

    Я начал largestInt и smallestInt с float('-inf') и float('inf') соответственно номерами, которые были меньше и больше, чем что-либо еще. Это делает первый раз, когда вы проверяете largestInt < number всегда true, независимо от числа в первой строке.

    Сравнение строк выполняется лексикографически, где символы сравниваются один за другим; 10 меньше 2, потому что 1 сортирует до 2.

    Вы можете использовать встроенные функции max() и min() для удобства, но это будет немного менее эффективно, поскольку внутри этих функций также выполняются петли:

    numbers = {int(line) for line in integers}
    largestInt = max(numbers)
    smallestInt = min(numbers)
    

    Martijn Pieters
    20 янв. 2014, в 20:59

    Поделиться

    В то время как мне обычно нравятся решения, которые используют min и max, для этого потребуется два линейных прохода в этом случае с большим объемом служебных данных. Здесь нужен метод, который нуждается в одном линейном проходе и постоянной памяти:

    with open('numbers.txt') as infile:
        smallest, largest = '', None
        for line in infile:
            n = int(line)
            smallest = min(n, smallest)
            largest = max(n, largest)
        print "the smallest number is", smallest
        print "the largest number is", largest
    

    inspectorG4dget
    20 янв. 2014, в 21:15

    Поделиться

    Как утверждали другие, вам нужно сначала преобразовать свои строки в целые числа. Кроме того, ваш script не выведет правильное минимальное число, если это число больше нуля. Чтобы исправить это, установите максимальное число и минимальное число в первую запись в вашем файле. Затем проверьте все остальные цифры и посмотрите, больше ли они/меньше текущего.

    with open('numbers.txt', 'r') as data_file:
        num = int(next(data_file))
        min_num, max_num = num, num
        for line in data_file:
            num = int(line)
            if num > max_num:
                max_num = num
            elif num < min_num:
                min_num = num
    
    print 'Smallest number: {}'.format(min_num)
    print 'Largest number: {}'.format(max_num)
    

    Это также можно решить с помощью списков:

    nums = [int(line) for line in open('numbers.txt', 'r')]
    min_num, max_num = min(nums), max(nums)
    

    Steinar Lima
    20 янв. 2014, в 20:18

    Поделиться

    Следует отметить, что при установке smallestInt на 0. Если наименьшее число, которое содержит текстовый документ, равно 1, вы все равно получите ответ 0.

    user2722670
    28 апр. 2015, в 06:07

    Поделиться

    integers = open('numbers.txt', 'r')
    intList = [int(x) for x in integers.readlines()]
    print max(intList), min(intList)
    

    Bryan
    20 янв. 2014, в 21:49

    Поделиться

    Вы сравниваете строки, а не ints. Вам нужно вызвать функцию int на них на определенном этапе, наиболее вероятно, чтобы преобразовать их в числа.

    Это пример другого подхода:

    with open('numbers.txt', 'r') as f:
        integers = [int(n) for n in f.readlines()]
    
    smallest = min(integers)
    biggest = max(integers)
    

    с помощью with гарантирует, что файл будет автоматически закрыт после понимания списка, что является хорошей практикой. Понимание списка приводит к:

    [6037, -2228, 8712, -5951, 9485, 8354, 1467, 8089, 559, 9439, -4274, 9278, -813, 1156, -7528, 1843, -9329, 574]
    

    Затем min и max вызываются в этом списке.

    Totem
    20 янв. 2014, в 21:45

    Поделиться

    Несколько вещей. Вам нужно передать line в int из строки: int(line.strip()) в настоящее время вы сравниваете int с строкой. Вы также должны указать назначение в largestInt = int(line.strip()) и то же самое для smallestInt.

    Нельзя использовать while. while предназначен для циклирования, а не для сравнения. Вы должны использовать if.

    И последнее, но не менее важное, обязательно закройте файл в конце. integers.close()

    Perefexexos
    20 янв. 2014, в 21:21

    Поделиться

    with open('number.txt') as f:
        s = [int(n.strip()) for n in f]
        print min(s), max(s)
    

    Guy Gavriely
    20 янв. 2014, в 20:26

    Поделиться

    Ещё вопросы

    • 1Могу ли я общаться JAVA с Javascript с помощью сокетов?
    • 1Показать список из списка viewbag в MVC4
    • 0Как отличить s от ş в подобном поиске
    • 0Проверьте соединение для URL — загрузка изображения
    • 0Использование printf для печати символов, когда у меня есть только пустой указатель на данные
    • 1Получить сфокусированное имя окна
    • 0Установка переменных в конструкторе с помощью этого
    • 0Jquery прокрутить до элемента, только если он еще не виден
    • 1Одна горячая кодировка на уровне персонажа
    • 1Каждый из next () и list () перебирает генератор с изменяемым объектом по-разному
    • 0почему изображение не занимает полную ширину в%?
    • 0Относительно предварительного объявления класса C ++
    • 1Бамбуковый плагин для отчетов о огурцах?
    • 0Дизайн синхронизации потоков Qt
    • 0MySQL объединяет три таблицы
    • 0Проверка формы AngularJS. Невозможно прочитать свойство ‘$ validators’ из неопределенного
    • 1Как изменить значение атрибута стиля программно?
    • 0MySQL провайдер данных .NET Core 2.0
    • 1Любые предложения о том, как я могу создать ссылку электронной почты в кнопке Java
    • 0Адаптивный дизайн изображения не будет масштабироваться при изменении размеров окна
    • 1Конкретный числовой формат Python в Excel
    • 1После перевода реселлервью перестает слушать сенсорные события
    • 0Как выбрать TR, но не тот, если его дочерний TD с селекторами JQuery?
    • 0Удержание вектора уникального значения, установленного для выбора цвета с использованием C ++ и OpenGL
    • 1включить поддержку Java8 в Eclipse?
    • 0Использование того же FK в таблицах Mutliple.
    • 0Использование $ scope. $ Destroy () после удаления директивы из dom
    • 1Как рассчитать сумму целых чисел ArrayList из пользовательского ввода
    • 0Как внедрить контроллер как зависимость при использовании нотации «Контроллер как»?
    • 0Paul Irish Infinite Scroll загружает сразу 2 страницы
    • 0javaScript Fade-In OnLoad
    • 1Как правильно импортировать хэш md5 в файл машинописи Angular 2?
    • 0Получить данные из Moodle без входа в систему с помощью файла PHP
    • 0принимая заголовок HTML к переменной javascript
    • 1C # — InstallUtil 32bit устанавливает службу, но выдает ошибку при запуске
    • 0Как создать начальное значение в массиве в Angular и отобразить это значение в текстовом поле?
    • 1удалить строку Pandas df с помощью маски на основе последней буквы столбца строки
    • 0Двоичное дерево JavaScript с поиском по ширине
    • 0Сохранить несколько данных в массиве обслуживания из контроллера?
    • 0Учебное пособие по Google Blobstore App Engine
    • 0Как работать с stl с функтором обтекания указателя функции?
    • 0Выдвижной ящик плохой FPS на мобильном телефоне
    • 0Laravel PHP: возникли проблемы при использовании nest ()
    • 0как получить псевдоним от angular-new-router?
    • 0Закройте окно браузера с помощью JavaScript, когда окно было открыто по тегу формы
    • 0Javascript не работает, когда echo’d по php
    • 1Камера «Bitmap imageBitmap = (Bitmap) extras.get (» data «);» выдает ошибку Nullpointer
    • 1Protobuf-net не будет десериализовывать данные из Protobuf.js
    • 1Вернуть строку с разделителями-запятыми, используя только значения
    • 1Scipy rv_continuous неправильно генерирует образец из распределения

    Сообщество Overcoder

    Вопрос:

    Мне нужно найти минимальное и максимальное значение из этого списка данных. Я могу получить максимум, но минимум. В текстовом файле много данных, поэтому я решил загрузить его здесь: https://www.dropbox.com/s/u5ov5zij9v5fumt/project05.data.txt?dl=0

    вход

    try:
    file_name = input("Enter the name of an input file ")
    input_file = open( file_name, "r" )
    header=input_file.readline()
    count=0
    total=0
    largest_num=0
    smallest_num=0
    michigan=""
    for line in input_file:
    output=float(line[67:71].rstrip())
    
    total += output
    count +=1
    if largest_num<= output:
    largest_num = output
    
    if smallest_num >= output:
    smallest_num = output
    
    if line[0:17].rstrip() == "Michigan":
    state=(line[0:17])
    number=(line[67:75])
    print("nState with the smallest MMR vaccation rate:")
    print("   with a rate of")
    print("n State with largest MMR vaccination rate:" )
    print("   with a rate of")
    
    print("nThe calculated average vaccination rate is",round(total/count,1))
    print("")
    print("Michigan MMR vaccination rate is", number)
    input_file.close()
    except FileNotFoundError:
    print("Error: file not found")
    file_name = input("Enter the name of an input file ")
    input_file = open( file_name, "r" )
    

    Лучший ответ:

    Перечисление – это ваши друзья.

    numbers = [float(line[67:71].rstrip()) for line in input_file]
    
    largest_num = max(numbers)
    smallest_num = min(numbers)
    total = sum(numbers)
    count = len(numbers)
    

    Понравилась статья? Поделить с друзьями:
  • Как найти число фенотипов
  • Как составить систему уравнений по задаче 9 класс
  • Как исправить ошибку на андроиде android process media
  • Как найти понимание у подростка
  • Как найти корень телефона