Python for loop пропускает любое другое значение

У меня возникла странная проблема в моем приложении django, где цикл for пропускает каждый другой элемент. Я беру возвращаемый запрос и list() ed для повторения. Дело в том, чтобы удалить элементы, которые находятся внутри другого списка, который передается в представление через переменную POST. Это представление представляет собой запрос ajax и возвращает список элементов JSON, которые необходимо переместить на страницу. после следующего запроса страница передает список идентификаторов объектов, которые уже находятся на странице, поэтому я могу удалить их из набора запросов и передать только новые. Я поставил несколько инструкций печати по всей части кода проблемы и понял, что при первом запросе со страницы список попадает на страницу пустым, потому что нет никаких отображаемых. Запрос запускается и возвращает все результаты, которые затем отображаются на странице. По второму запросу список попадает на страницу со всеми идентификаторами, и в этом возникает проблема. Когда я просматриваю запрос, проверяя, находятся ли идентификаторы в списке, он выполняет только итерацию по нечетным значениям (которые удаляются) и возвращает список объектов четного id'd, которые будут отображаться во второй раз на странице.

код:

  • Ошибка: Сломанная труба
  • Измените IntegerProperty на FloatProperty существующего AppEngine DataStore
  • Django формирует множественный выбор
  • Nginx бросает 403 Запрещено на статические файлы
  • Django Получить последнюю запись из базы данных
  • Как поместить продукт в корзину через tasytpie API?
  •  items = list(listobj.getItems()) temp = items print "Item List: ", temp print "Rendered List: ", request.POST['rendered'].split(',') for item in temp: print "Item ID: ", str(item.id) print "Rendered List: ", request.POST['rendered'].split(',') if str(item.id) in request.POST['rendered'].split(','): items.remove(item) print "Removed Item: ", item.id print "Unrendered Items: ", [item.id for item in items] 

    Результаты:

      [02/Aug/2011 20:17:25] "GET /list/list HTTP/1.1" 200 6256 Item List: [<Item: Item object>, <Item: Item object>, <Item: Item object>, <Item: Item object>, <Item: Item object>, <Item: Item object>, <Item: Item object>, <Item: Item object>, <Item: Item object>] Rendered List: [u''] Item ID: 1 Rendered List: [u''] Item ID: 2 Rendered List: [u''] Item ID: 3 Rendered List: [u''] Item ID: 4 Rendered List: [u''] Item ID: 5 Rendered List: [u''] Item ID: 6 Rendered List: [u''] Item ID: 7 Rendered List: [u''] Item ID: 8 Rendered List: [u''] Item ID: 9 Rendered List: [u''] Unrendered Items: [1, 2, 3, 4, 5, 6, 7, 8, 9] [02/Aug/2011 20:17:25] "POST /items/ HTTP/1.1" 200 528 Item List: [<Item: Item object>, <Item: Item object>, <Item: Item object>, <Item: Item object>, <Item: Item object>, <Item: Item object>, <Item: Item object>, <Item: Item object>, <Item: Item object>] Rendered List: [u'1', u'2', u'3', u'4', u'5', u'6', u'7', u'8', u'9'] Item ID: 1 Rendered List: [u'1', u'2', u'3', u'4', u'5', u'6', u'7', u'8', u'9'] Removed Item: 1 Item ID: 3 Rendered List: [u'1', u'2', u'3', u'4', u'5', u'6', u'7', u'8', u'9'] Removed Item: 3 Item ID: 5 Rendered List: [u'1', u'2', u'3', u'4', u'5', u'6', u'7', u'8', u'9'] Removed Item: 5 Item ID: 7 Rendered List: [u'1', u'2', u'3', u'4', u'5', u'6', u'7', u'8', u'9'] Removed Item: 7 Item ID: 9 Rendered List: [u'1', u'2', u'3', u'4', u'5', u'6', u'7', u'8', u'9'] Removed Item: 9 Unrendered Items: [2, 4, 6, 8] [02/Aug/2011 20:17:55] "POST /items/ HTTP/1.1" 200 252 

  • Django Rest Framework загружает файл в метод
  • Не могу получить post_save для работы в Django
  • Определить полную конфигурацию URL-адреса Django
  • Как использовать Django для получения имени для хост-сервера?
  • Возвращение массива JSON из представления Django в шаблон
  • Django: ModelMultipleChoiceField не выбирает начальные варианты
  • 2 Solutions collect form web for “Python for loop пропускает любое другое значение”

    temp и items относятся к одному и тому же объекту, поэтому, когда вы делаете items.remove() вы также items.remove() temp . Вероятно, вы захотите сделать temp = items[:] чтобы скопировать значения списка items .

    Вы не должны изменять структуру данных во время итерации по ней.

    В любом случае, это более сжатый и эффективный код для вашей работы:

     items = list(listobj.getItems()) rendered = set((int(i) for i in request.POST['rendered'].split(','))) unrendered = [item for item in items if item.id not in rendered] 
    Python - лучший язык программирования в мире.