Уведомления

Группа в Telegram: @pythonsu

#1 Июль 29, 2020 15:22:44

GoshkaLP
Зарегистрирован: 2016-09-29
Сообщения: 19
Репутация: +  0  -
Профиль   Отправить e-mail  

Чтение чисел из строки

Добрый день! Вот у меня есть строка, допустим
1 1 1 1 1
Можно ли как то читать по одному числу из данной строки, не считываю полностью?
То есть следующее решение не подходит: arr = list(map(int, input().split()))

Офлайн

#2 Июль 29, 2020 18:36:22

AD0DE412
Зарегистрирован: 2019-05-12
Сообщения: 1130
Репутация: +  44  -
Профиль   Отправить e-mail  

Чтение чисел из строки

GoshkaLP
не считываю полностью?
не полностью считывая что?
если строку то зачем ее не польностью счивывать
ведь это уже перемееная имеющая значения типа str те это объект в памяти итп итд
уточниете не очень понятно что вы под этим имеете в ввиду



1. пжлст, форматируйте код, это в панели создания сообщений, выделите код и нажмите что то вроде
2. чтобы вставить изображение залейте его куда нибудь (например), нажмите и вставьте ссылку на его url

есчщо

Отредактировано AD0DE412 (Июль 29, 2020 18:40:08)

Офлайн

#3 Июль 29, 2020 18:42:06

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Чтение чисел из строки

string_reader = iter('123456')

print(next(string_reader))
print(next(string_reader))
print(next(string_reader))
print(next(string_reader))
print(next(string_reader))
print(next(string_reader))
print(next(string_reader))



Офлайн

#4 Июль 29, 2020 18:45:15

AD0DE412
Зарегистрирован: 2019-05-12
Сообщения: 1130
Репутация: +  44  -
Профиль   Отправить e-mail  

Чтение чисел из строки

да но … хотя да (там еще есть пробелы но это уже придирки)



1. пжлст, форматируйте код, это в панели создания сообщений, выделите код и нажмите что то вроде
2. чтобы вставить изображение залейте его куда нибудь (например), нажмите и вставьте ссылку на его url

есчщо

Отредактировано AD0DE412 (Июль 29, 2020 18:50:31)

Офлайн

#5 Июль 29, 2020 22:14:35

GoshkaLP
Зарегистрирован: 2016-09-29
Сообщения: 19
Репутация: +  0  -
Профиль   Отправить e-mail  

Чтение чисел из строки

Имелось в виду, что эти числа подаются на вход, то есть в инпут грубо говоря, поэтому хотелось бы считывать их по одному, как допустим это работает в С++

Офлайн

#6 Июль 30, 2020 02:13:10

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9882
Репутация: +  853  -
Профиль   Отправить e-mail  

Чтение чисел из строки

GoshkaLP
поэтому хотелось бы считывать их по одному, как допустим это работает в С++
Что ты имеешь в виду конкретно? Там дофига способов считывания чисел по одному.
Приведи код.

GoshkaLP
Вот у меня есть строка, допустим
1 1 1 1 1
Можно ли как то читать по одному числу из данной строки, не считываю полностью?
То есть следующее решение не подходит:
  
arr = list(map(int, input().split()))
Если тебе подают числа друг за другом “бесконечно” (хотя там нет бесконечности, но похожее на бесконечность понятие может быть - получение данных с датчиков, которые работают непрерывно сутками), то читать их можно в конечном автомате, который берёт по символу и копит из них числа, а потом при разрыве числа передаёт число на ожидающий число алгоритм.

В питоне ты можешь использовать для этого sys.stdin.
  
>>> import sys
>>> 
>>> s = sys.stdin.read(2)
12345 
>>> s
'12'
>>>

Пример конечного автомата
Конечный автомат считывает символы и выделяет из них только числа (группы цифр), сохраняя их.
  
>>> import sys
>>> 
>>> def f(count):
...     out = []
...     n = 0
...     state = 'wait_digit'
...     accumulator = ''
...     while True:
...         ch = sys.stdin.read(1)
...         if state == 'wait_digit':
...             if ch.isdigit():
...                 accumulator += ch
...                 state = 'wait_nondigit'
...         elif state == 'wait_nondigit':
...             if ch.isdigit():
...                 accumulator += ch
...             else:
...                 number = int(accumulator)
...                 accumulator = ''
...                 out.append(number)
...                 n += 1
...                 state = 'wait_digit'
...         if n >= count:
...             break
...     return out
... 
>>> f(3)
  111  222  333  444  555  666  777  888  x
[111, 222, 333]
>>> 
>>> f(1)
[444]
>>> 
>>> f(1)
[555]
>>> 
>>> f(2)
[666, 777]
>>> 
>>> f(2)
999
[888, 999]
>>>



Отредактировано py.user.next (Июль 30, 2020 02:19:51)

Офлайн

#7 Июль 30, 2020 02:19:31

GoshkaLP
Зарегистрирован: 2016-09-29
Сообщения: 19
Репутация: +  0  -
Профиль   Отправить e-mail  

Чтение чисел из строки

py.user.next

Вот например:
for (size_t i = 0; i < n; ++i) {
cin >> x;
}
(При этом подразумевается что числа подаются друг за другом через пробел)
То есть хочется сразу обрабатывать числа на лету, не сохраняя их в какой-нибудь массив.

Отредактировано GoshkaLP (Июль 30, 2020 02:24:55)

Офлайн

#8 Июль 30, 2020 02:27:03

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9882
Репутация: +  853  -
Профиль   Отправить e-mail  

Чтение чисел из строки

GoshkaLP
То есть хочется сразу обрабатывать числа на лету, не сохраняя их в какой-нибудь массив.
Вот этот конечный автомат бери и при обнаружении числа обрабатывай его.

Можно генератор построить. Но это уже частности.
  
>>> import sys
>>> 
>>> def g():
...     state = 'wait_digit'
...     accumulator = ''
...     while True:
...         ch = sys.stdin.read(1)
...         if state == 'wait_digit':
...             if ch.isdigit():
...                 accumulator += ch
...                 state = 'wait_nondigit'
...         elif state == 'wait_nondigit':
...             if ch.isdigit():
...                 accumulator += ch
...             else:
...                 number = int(accumulator)
...                 accumulator = ''
...                 yield number
...                 state = 'wait_digit'
... 
>>> numbers = g()
>>> 
>>> next(numbers)
  111  222  333  444 x 555 666 y 777 z 888 x
111
>>> next(numbers)
222
>>> next(numbers)
333
>>> next(numbers)
444
>>> next(numbers)
555
>>> next(numbers)
666
>>> next(numbers)
777
>>> next(numbers)
888
>>> next(numbers)
999
999
>>>



Офлайн

#9 Июль 30, 2020 03:08:10

GoshkaLP
Зарегистрирован: 2016-09-29
Сообщения: 19
Репутация: +  0  -
Профиль   Отправить e-mail  

Чтение чисел из строки

py.user.next
Спасибо!

Офлайн

#10 Июль 30, 2020 08:43:48

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Чтение чисел из строки

Да похоже автору стримов хочется
см. StringIO
https://docs.python.org/3/library/io.html

Иногда бывает полезно…



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version