[Freeschool] [JT] Re: чему стоит учить в школе
Denis Kirienko
=?iso-8859-1?q?dk_=CE=C1_altlinux=2Eru?=
Пт Окт 24 17:53:21 MSD 2008
Mikolaj Golub пишет:
> Если допустим файл следующего содержания:
>
> 1 2 3 4
> test rest
> end
>
> То в результате выполнения следующего кода:
>
> a = IO.read("/tmp/test.dat").split()
>
> переменная a будет ссылаться список:
>
> ["1", "2", "3", "4", "test", "rest", "end"]
>
> Этого хотелось?
Да, именно этого, спасибо!
Я не могу не поблагодарить всех, кто предлагает здесь массу коротких и
длинных вариантов решения задачи, соответственно, не очень эффективных и
очень эффективных. Мне же нужен вариант не только решающий задачу, но
также простой и понятный. Желательно в одну или две строчки. Чтобы можно
было написать его в качестве примера и сказать "можно делать так". Чтобы
школьник хоть что-то мог решить. А если он захочет найти более
эффективное решение - пусть сам копает.
Поэтому я все читаю, а на заметку беру именно простые, одно-двухстрочные
решения.
Кстати, самое первое решение на Питоне, где было
sys.stdin.read().split() я сегодня проверил на задаче с большим вводом.
Ввод там - 100.000 натуральных чисел до 10.000 каждое, т.е. где-то
полмегабайта данных. Больший ввод, как правило, бывает редго. Так вот -
вызов read() и split() на нашей тестовой машинке занимает где-то 0.04
секунды.
Это без преобразования элементов в int.
А вот последующий вызов функции int для каждого элемента списка требует
еще около 0.15 секунд, т.е. значительно дольше. Это при ограничении в 1
секунду на решение всей задачи (ввод-вывод и само решение).
Из этого я сделал вывод, что ничего страшного в чтении всего файла в
память и вызова split нет, так как последующие накладные расходы будут
больше.
Вот еще такой вопрос - с питоном и руби разобрались, с перл я сам давно
так делать умею. Кто-нибудь подкинет аналогичный способ для php?
Данные можно читать из файла, можно - из stdin. Лучше всего -
универсальный способ, работающий как для файлов, так и для stdin.
--
Денис
Подробная информация о списке рассылки Freeschool