Skip to main content
 首页 » 编程设计

Python for 循环跳过所有其他值

2025年05月04日11lhb25

我在我的 Django 应用程序中遇到了一个奇怪的问题,其中 for 循环跳过了所有其他项目。我获取了一个返回的查询集并 list()ed 进行迭代。这样做的目的是删除另一个列表中的项目,该列表通过 POST 变量传递给 View 。此 View 是一个 ajax 请求并返回需要推送到页面的项目的 JSON 列表。在下一个请求时,页面传递页面上已有对象的 ID 列表,因此我可以从查询集中删除这些对象并仅传回新对象。我在代码的问题部分放置了几个打印语句,并发现在页面的第一个请求中,列表进入页面时是空的,因为没有任何显示。查询运行并返回所有结果,然后显示在页面上。在第二个请求中,列表进入包含所有 id 的页面,这就是问题发生的地方:当我循环查询集时,检查 id 是否在列表中,它只迭代奇数(已删除)并返回偶数 id 对象的列表,以在页面上第二次显示。

代码:

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 

请您参考如下方法:

temp 和 items 指的是同一个对象,所以当您执行 items.remove() 时,您也在修改 温度。您可能想要执行 temp = items[:] 来复制 items 列表的值。