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

    −99

    1. 1
    2. 2
    3. 3
    4. 4
    if len(date.split("-")[2]) == 2:
                pass
            else:
                date=date[:-4]+date[-2:]

    Надо было быстро "убрать" первые 2 цифры из года если вместо "гг" было "гггг" в "дд.мм.гг"

    Запостил: xvost, 19 Августа 2014

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

    • пхп даты теперь на питоне
      Ответить
    • Простите не выгвидка, но что означает date[:-4]?
      Ответить
      • слайс от нулевой позиции до позиции перед 4 элементом с конца
        Ответить
        • Ясно. Я так понимаю, что нужно было просто где то поменять формат даты.
          Ответить
      • Это не питоновское, Питон это позаимсвовал, либо из Матлаба, либо из S. Или может было еще что-то более древнее, откуда такая запись пришла, просто если оно было, то почти наверняка до моего рождения.

        Единственное что, оник как-то плохо позаимствовали, т.е. в цикле используют range, а в доступе к массиву - слайсы. Не понятно зачем так.
        Ответить
        • Можно по-подробнее в чем плохость? range - обычный генератор. Срез это срез. И да - срезы из фортрана
          Ответить
          • octave> for i = 0:10 printf("%d\n", i) end
            0
            1
            2
            3
            4
            5
            6
            7
            8
            9
            10
            octave> i = 0:10
            i =
            
                0    1    2    3    4    5    6    7    8    9   10
            octave> i(1:3)
            ans =
            
               0   1   2

            Так этот оператор используется в Октаве (Матлабе), в Питоне для этого два разных оператора: range и :.
            Ответить
            • Ты имеешь ввиду адресацию по списку индексов? Ну в чем-то slice и range() (xrange во втором) действительно похожи. Глянь на numpy, кстати, там такая адресация запилена.
              Ответить
              • Он предлагает просто ввести тип range, который можно юзать примерно так:
                a = 5
                r = a:a+5 # здесь у нас range(a, a+5)
                b[0:3] # слайс принимает аргумент типа range
                b[a:8] # поэтому мы можем так
                b[f()] # и даже так, если f() возвращает range
                for i in 0:3: # этот range умеет в итераторы, поэтому можно так
                for i in r: # и так тоже
                И всё будет логично и красиво. Ну либо вообще не делать специальный синтаксис/тип, и пусть слайсы работают на обычном range:
                s[range(2, 5)]
                Ответить
                • При чем, можно еще и from:to:by использовать. А может еще by не константа, а, например, функция, чтобы можно было, например, там использовать логарифм, или рандомвок, или Аккермана (случайно).
                  Ответить
                • Он просто предлагает разрешить использовать slice не только в индексах. Пусть себе выражение возвращает range.
                  Ответить
            • Но в матлабе конечно никаких рейнджей нет, этот синтаксис создает обычный массив.
              Ответить
              • Так рендж и в Питоне создает обычный массив:
                foo = range(10)
                >>> foo
                [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
                Ответить
                • А ":"?
                  Ответить
                  • Ну так об том же и речь, что копировали, но не до конца. ":" - ничего не создает, это скопированый синтаксис но без изначального смысла.
                    Ответить
                • В двойке.
                  Ответить
    • >>> re.sub(r'([^-]{2})([^-]{2})$', r'\1', 'aa-bb-cc')
      'aa-bb-cc'
      >>> re.sub(r'([^-]{2})([^-]{2})$', r'\1', 'aa-bb-cccc')
      'aa-bb-cc'
      Ответить
      • datetime.datetime.strptime(date, "%Y-%m-%d %H:%M:%S")
        Ответить
        • Мой вариант и короче и быстрее :)
          Ответить
          • Только у Вас опечатка, судя по всему. Надо r'\2'.
            >> быстро "убрать" первые 2 цифры из года
            Ответить
            • А ну да, так и есть, нужно вторую группу.
              Ответить
          • Но он от этого костылем не перестает быть.
            так вообще то еще быстрее будет работать и коротко вполне, чем не решение?
            date = date[:-4]+date[-2:] if len(date.split("-")[2]) == 2 else date
            Ответить
            • Ещё быстрее, чем не решение :)
              date = date[:-4]+date[-2:] if len(date) == 10 else date
              Ответить
              • re.sub(r'([^-]{2})([^-]{2})$', r'\2', date)
                date = date[:-4]+date[-2:] if len(date) == 10 else date

                Зато короче.

                Даже еще короче:
                re.sub(r'[^-]{2}([^-]{2})$', r'\1', date)
                Ответить
                • re.sub(r'([^-]{2})([^-]{2})$', r'\2', date)
                  re.sub(r'[^-]{2}([^-]{2})$', r'\1', date)
                  re.sub(r'\d\d(\d\d)$', r'\1', date)

                  Если краткость в моде...
                  Ответить
                  • re.sub(r'[^-]{4}$', date[-2:], date)

                    Последнее выражение не эквивалентно ОПу.
                    Ответить
                    • Да тут почти ничего не эквивалентно, достаточно скормить строку "01-01-02-1000".

                      Если сократить имя date, Ваш вариант - самый короткий, поздравляю.

                      P.S. Если учесть присваивание и сократить date, предыдущий Ваш вариант был слишком длинным:
                      d = re.sub(r'([^-]{2})([^-]{2})$', r'\2', d)
                      d = d[:-4]+d[-2:] if len(d) == 10 else d
                      Ответить
          • И нечитаемее. На перл, быдло.
            Ответить
            • Нечитаемее для ниасиливших. Быдло = ниасилившие.
              Ответить
              • Нахуй мне что-то осиливать? Вали на перл, питон не для вас, асиляторов.
                Ответить
        • Объясните мне, какая разница между time и datetime и нахуя плодить 2 штуки?
          Ответить
          • anonimb84a2f6fd141 -самый анонимный аккаунт на говнокоде

            Вот! Анинимб идет!
            Его немного прет
            Что он нам несет?
            Гоатсе или код?
            Коменты иль хуй в рот?
            В жизнь не разберешь
            Пока ты не прочтешь!
            Ответить
            • Ты не думал в барды идти?
              Ответить
              • там пить надо и засаленный свитер носить
                Ответить
                • А я думал - петь хриплым голосом всякую хуйню под гитарку.
                  Ответить
                  • одно другое не исключает.
                    Ответить
                    • ты не понимаешь. Петь хуергу под гитару любой дурак смогет, а тут четкий имедж-конлроль
                      Ответить
                • Ты с эникеем перепутал.
                  Ответить
    • Помни, guest, за тобой могут следить!
      Ответить
    • показать все, что скрытоНет желающих соснуть крепкие, терпкие сомалийские хуйцы, шоколадного цвета?
      Ответить

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