1. Python / Говнокод #12888

    −105

    1. 1
    python -c 'import sys; print("\n".join(map(" ".join, zip(*map(str.split, sys.stdin.readlines())))))'

    Just for fun. Транспонирование таблицы.
    Само собой, гк в применении питона в не совсем подходящей для него нише.

    Запостил: antibot-01, 13 Апреля 2013

    Комментарии (21) RSS

    • для эстетов, чтобы хоть немного подсветилось:
      import sys
      print("\n".join(map(" ".join, zip(*map(str.split, sys.stdin.readlines())))))
      Ответить
    • "Само собой, гк в применении питона в не совсем подходящей для него нише."

      э???

      список "подходящих" ниш в студию.
      Ответить
      • Python как раз таки подходит из-за numpy:

        import numpy as np
        import sys
        
        M = np.loadtxt(sys.stdin, dtype=np.int)
        T = np.matrix.transpose(M)
        np.savetxt(sys.stdout, T, fmt='%d')


        myaut@panther:~/Temp> echo $'1 2\n3 4' | python numpy_t.py
        1 3
        2 4
        Ответить
        • psc -r | sc -W% -
          Ответить
        • Кстати, так и не понял в чем профит при транспонировании текстовой таблицы. По времени раз в 5 дольше..
          Ответить
      • Про скрипт непосредсвенно в командной строке же.
        Ответить
        • ну и что? и не то что бы строка была длиной. это строго попадает в категорию one-liner'ов.

          что на шелле что на авк что на седе что на перле это как бы норма вещей. и кто-то знает пути как тоже самое на питоне делать.

          говна не вижу.
          Ответить
          • Ну блин, а если понадобится немного изменить однострочник, да хоть if перед принтом воткнуть, а уже есть import-statement (=> раскладка не позволит)?

            Ну можно, конечно, в $'..' обернуть . но тогда придется удваивать неэкранирующие слэши.
            Ответить
            • вот эти "а если" и являются естественным разграничителем что делается однострочником, а что нет.

              почти в любой (скриптовом) языке есть какие-то конструкцие которые проще писать скриптом, чем пытаться в одну строку запихнуть.
              Ответить
              • Какие еще "естественные разраничители", если они не вызывают особых затруднений у awk / perl (прости, господи) / ruby?
                Ответить
                • "если они не вызывают особых затруднений у awk / perl (прости, господи) / ruby?"

                  прощаю.

                  примеры того что сложно делать уан-лайнерами, внезависимости от языка, потому что строка становится слишком длиной: (вложеные) циклы, временные переменные, состояние/фаза обработки ввода, дополнителные действия по окончанию работы.

                  код этого ГК например на других языках в одну строчку сделать будет сложно, потому что нативной функции транспонирования ни в одном из них нету. а на питоне - вот пожалуйте.
                  Ответить
                  • > примеры того что сложно делать уан-лайнерами, внезависимости от языка

                    Выше уже намекал, что относительно других языков у питона дополнительное ограничение раскладки, покажите где неправ.

                    > ни в одном из них нету

                    Таки? [code]ruby -e 'puts STDIN.each.map(&:split).transpose.map{|l | l.join" "}'[/coed]
                    Ответить
                    • "Таки?"

                      ок. в одном есть. и именно в том одном, который нигде никогда не предустановлен.
                      Ответить
                      • > который нигде никогда не предустановлен

                        Левый аргумент, если говорить о "предустановке", то можно хоть sshfs примонтировать, хоть awk-скрипт достать из заначки, а в тяжелом случае - собрать transpose c sourceforge.

                        Как вам луж^Wой, в смысле понравилось ли "отыгрывать" роль паладина питона? ^_^
                        Ответить
                        • вообще-то я перловщик, и отстаивал реалии one-liner'ов.

                          (и меня просто порадовало что и в питоне тоже возможны достойные однострочники. не смотря на то что сам питон терпеть не могу.)

                          и поверь мне, предустановлено/не предустановлено IRL играет громадную роль. я не могу послать строчку/скрипт руби или питона, потому что знаю что на *NIX продакшн системах это просто не стоит. потому что не предустановлено. потому что не поддерживаемое 3rd party. в то время как perl/awk/sed/sh 100% гарантии предустановлены и поддерживаются. (на маках питон к слову предустановлен.)
                          Ответить
                          • На всех линуксах практически из коробки есть python.
                            Ответить
                            • на линухах - да. но линухи к сожалению еще не во все ниши пробрались. я думал что с гегемонией x64 придет и гегемония линуха, а вот вам мля и нет: большинство новых проектов - солярка/х64.
                              Ответить
                          • Дело в том, что этот случай выбивается: да, можно уместить в одну строку, но при небольших изменениях придется плясать. Для питона лучше скрипт и уже его запускать, чтобы заранее уменьшить возможные телодвижения.

                            Не сильно длинее будет тот же awk накидать.
                            Для одноразового вызова можно и socat прокинуть на машину с любимым средством.

                            // А против однострочников ничего не имею.
                            Ответить
                            • "да, можно уместить в одну строку, но при небольших изменениях придется плясать."

                              зачем плясять?????

                              я только сейчас уловил что у тебя похоже какая-то философская/религиозная проблема с переходом от однострочника к полноценному скрипту.

                              нет проблем.

                              например если есть комманда `python -c 'бля-бля-бля'`, нажимаешь ^A (или Хоум), пишешь `echo > mycoolscript.py` и нажимаешь ввод. и вот, вместо однострочника у вас уже почти есть скрипт.
                              Ответить
                              • Вопрос-то в том, стоит ли вообще начинать писать однострочник на питоне.
                                Ответить
                                • ну по крайнем мере в случае приведенном в ГК, однострочник вполне функциональный.
                                  Ответить

    Добавить комментарий