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

    −179

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    incoming=[2,0,4,6,2,1,0,4,3,0]
    outgoing=[5,0,3,3,0,2,3,5,0,2]
    
    for i in sorted(range(allopers.__len__()), reverse=True):
          if int(incoming[i])==int(outgoing[i])==0:
               del incoming[i]
               del outgoing[i]
               del allopers[i]

    длинна списков allopers, incoming и outgoing равна.
    наговнокожено: пытаюсь исключить из них элементы с номером n, для которых incoming[n]==outgoing[n]==0.
    типа иду с конца, и если совпало - удаляю элемент.

    Запостил: fr_butch, 14 Января 2011

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

    • всё бы отнимать да делить ...

      нет бы новый список строить без тех, которые ...
      Ответить
    • Всем, кто удаляет из списка по одному символу, забить в голову гвоздь. Кроме детей, им можно.
      Я даже для детей статью написал:
      http://forum.pascal.net.ru/index.php?showtopic=26642&pid=149160&st= 0&#entry149160
      Ответить
      • >Всем, кто удаляет из списка по одному символу, забить в голову гвоздь
        Лучше ума.)
        Ответить
        • "Лучше -- гвоздь!" [рядом -- фото счастливого и широко улыбающегося молодого человека с гвоздем в черепе]
          Мы будем богаты.
          Ответить
          • А смеяться над кем вы будете тогда?
            Ответить
            • Над теми, кто не удаляет из списка по одному символу?..
              зы: это проект социальной рекламы, ничего смешного.
              Ответить
      • >>статью
        громкое название для отписки на форуме.

        мутабельные однопоточные приложения - зло.
        Ответить
    • Заменить ужасающее sorted(range(allopers.__len__()), reverse=True) на xrange(len(allopers)-1, -1, -1) -- и можно оставить. Ну ещё int там лишний.

      Если же очень хочется создать новые списки, то можно сделать, например, так:
      keep=[i for i in xrange(len(allopers)) if not incoming[i]==outgoing[i]==0]
      incoming=[incoming[i] for i in keep]
      outgoing=[outgoing[i] for i in keep]
      allopers=[allopers[i] for i in keep]


      Эти способы не всегда взаимозаменяемы.
      Ответить
    • incoming, outgoing, allopers = (x for x in zip(incoming, outgoing, allopers) if any(x[0:1]))
      Ответить
      • Фигню написал.
        incoming, outgoing, allopers = zip(*(x for x in zip(incoming, outgoing, allopers) if any(x[0:2])))
        Ответить

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