【问题标题】:List not filling properly列表未正确填写
【发布时间】:2018-05-26 12:09:38
【问题描述】:

所以,我有这段代码应该通过产品列表,将它们与价格链接起来,然后在网页上向用户显示带有价格的产品作为“显示项目”

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)

它显示:

香蕉

香蕉

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

【问题讨论】:

    标签: python django list


    【解决方案1】:

    初始化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)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-18
      • 2020-08-16
      • 1970-01-01
      • 2016-01-22
      • 1970-01-01
      相关资源
      最近更新 更多