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

    −162

    1. 1
    2. 2
    3. 3
    >>> mylist = [3,5,8,5,3,12]
    >>> print dict().fromkeys(mylist).keys()
    [8, 3, 12, 5]

    "Getting rid of duplicate items in a list" типа способ убрать дубликаты в списке

    Запостил: argos, 11 Августа 2010

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

    • гы)) напомнило сортировку массива через листбокс с sorted=true
      Ответить
    • га
      Ответить
    • Хмммм. А как это сделать правильно?
      сортировка и пропуск одинаковых значений?
      Ответить
      • в рубине
        mylist.uniq!
        Ответить
      • mylist = [3,5,8,5,3,12]
        boo = []
        for i in range(0,len(mylist)):
                k = mylist[i]
                here = False
                for i in range(0,len(boo)):
                        if k == boo[i]:
                                here = True
                                break
                if not here:
                        boo.append(k)
        print boo

        Понял? Запомнили? Закрепили? Уехали.
        Ответить
        • Ну, если уж на то пошло...
          res = []
          for item in src:
            if item not in res:
              res.append(item)


          Вот только мне кажется что должен быть способ лучше...
          Ответить
          • Це був сарказм. Это самый простой способ. Длиннее придумать довольно сложно.
            Ответить
        • Хммм, любопытно.
          Testing methods
          method_Atravert: [3, 5, 8, 12]
          method_simple: [3, 5, 8, 12]
          method_dict: [8, 3, 12, 5]
          method_set: [8, 3, 12, 5]
          method_sort: [3, 5, 8, 12]
          1000000 iterations
          method_Atravert: 10.265000s
          method_simple: 2.578000s
          method_dict: 1.829000s
          method_set: 1.937000s
          method_sort: 4.687000s


          Т.е. говнокодерский метод оказался очень даже быстрым. Я бы, наверно, попробовал конструкцию list(set(src)), которая оказалась чуть медленнее. Или лобовой способ, приведенный в комменте выше.
          Сортировка моих надежд не оправдала.

          Код: http://vindicar.pastebin.com/9wePBmeY
          Ответить
    • В ветке про Perl был примерно такой же "говнокод". И там, и тут удаление дубликатов из списка через хэш - стандартный приём, когда не важен порядок. Правда в Python с версии 2.5 можно делать проще:
      mylist = list(set(mylist))
      Ответить
      • А есть ещё ССЗБ, которые пользуются версиями ниже 2.6?
        Ответить
        • Если проекту больше пяти лет, на 2.5 можно было и не рассчитывать.
          Ответить
    • Стандартный способ убирать дубликаты до появления в языке set.
      Ответить
    • Код как код. Однострочник для избавления от дубликатов без сохранения порядка. Кто-то знает как сделать это короче?
      Ответить

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