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

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

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

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

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