Improve Article
Save Article
Like Article
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 Метки нет (Все метки)
Помогите исправить
0 |
Модератор 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 минуты
for i in range(14): сначала прочитайте текст, а уже потом используйте цикл
0 |
New_user4 1 / 1 / 0 Регистрация: 09.11.2019 Сообщений: 86 |
||||||||||||||||
16.10.2020, 09:15 [ТС] |
4 |
|||||||||||||||
— порядковый номер и число
14 строк
минимальное число ищу
вывожу мини минимальное число Добавлено через 4 минуты
0 |
ioprst 1303 / 843 / 409 Регистрация: 12.03.2018 Сообщений: 2,305 |
||||
16.10.2020, 09:29 |
5 |
|||
0 |
Vigi 628 / 468 / 179 Регистрация: 28.05.2012 Сообщений: 1,399 |
||||||||
16.10.2020, 10:01 |
6 |
|||||||
Добавлено через 6 минут
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 неправильно генерирует образец из распределения
Вопрос:
Мне нужно найти минимальное и максимальное значение из этого списка данных. Я могу получить максимум, но минимум. В текстовом файле много данных, поэтому я решил загрузить его здесь: 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)