列表填写不正确

2024-09-28 19:23:05 发布

您现在位置:Python中文网/ 问答频道 /正文

因此,我有一段代码,它应该遍历一个产品列表,将它们与价格联系起来,然后将产品与价格作为“显示项”显示在网页上给用户

for product in product_list:
    p = PricedProduct.objects.filter(proid=product)
    p.order_by('date')


    dp = DisplayProduct
    dp.proid = product.id
    dp.proname = product.productname

    print(product.productname)

    dp.proprice = p[0].value
    displaylist.insert(0,dp)

在这里,我将项目链接到“打印”方法当前显示的价格:

苹果

香蕉

但是当我跑步时:

for dp in displaylist:
    print(dp.proname)

它显示:

香蕉

香蕉

有人能告诉我为什么会这样,因为它导致我的网页只显示了两个香蕉,而不是一个苹果和一个香蕉


Tags: 代码in苹果网页for产品价格product
1条回答
网友
1楼 · 发布于 2024-09-28 19:23:05

如果不初始化DisplayProduct,只需将dp设置为对DisplayProduct类的引用,结果是直接更改类的字段:

for product in product_list:
    p = PricedProduct.objects.filter(proid=product)
    p.order_by('date')


    dp = DisplayProduct()  # construct a new DisplayProduct
    dp.proid = product.id
    dp.proname = product.productname

    print(product.productname)

    dp.proprice = p[0].value
    displaylist.insert(0,dp)

请注意,此代码效率相当低:通过在顶部插入,可以构造时间复杂度O(n2的算法。在列表末尾追加通常更有效(因为它具有摊余成本O(1))。如果你需要颠倒清单,最好在最后颠倒一下

我还建议为DisplayProduct构造一个合适的初始值设定项(也许您的类已经有了一个合适的初始值设定项),这样我们就可以重写它:

for product in product_list:
    p = PricedProduct.objects.filter(proid=product)
    p.order_by('date')

    # might require some changes to the __init__ of DisplayProduct
    dp = DisplayProduct(
        proid=product.id,
        proname=product.productname,
        proprice=p[0].value
    )

    print(product.productname)

    # appending is more efficient than prepending
    displaylist.append(dp)

相关问题 更多 >