Блог пользователя VitalyPavlenko

Автор VitalyPavlenko, 17 лет назад, По-русски
Как вы знаете, в питоне нет потокового ввода-вывода — чтобы прочитать числа из входного файла, нужно знать, как там эти числа лежат — в одной строке или в разных. Иногда авторы условий и тестов кладут числа во вход как попало.
Задача. На питоне прочитать в список data числа из файла fin. Гарантируется, что в файле нет ничего, кроме чисел. Между числами могут встречаться любые пробельные символы.
Решение.
data = [int(x) for x in reduce(lambda x, y: x + y, [s.split() for s in fin.readlines()])]
Если начинающим питонистам нужны разъяснения — спрашивайте в комментариях.
  • Проголосовать: нравится
  • 0
  • Проголосовать: не нравится

17 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
int(x) в конце, чтобы удостовериться что число пришло?
17 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Так мы сразу грузим весь входной файл в память, это не всегда хорошо. Я бы написал ввод так:

def tokens(f):
    for line in f:
       for token in line.split():
           yield token
  • 17 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится
    Эта функция возвращает некоторый generator object. Что с ним можно потом делать?
    • 17 лет назад, скрыть # ^ |
       
      Проголосовать: нравится 0 Проголосовать: не нравится
      Итерироваться по нему, либо достовать токены по одному методом .next()

      Мы похожим образом пишем ввод на яве (реализем nextToken, nextInt и т. д.), получается вполне удобно и незатратно в плане памяти