Python 我想创建一个列表列表

Python 我想创建一个列表列表,python,python-3.x,django,django-models,Python,Python 3.x,Django,Django Models,我知道在stackoverflow上有很多类似的问题,但它们似乎并没有解决我的问题。如果您查看下面的代码,您可以看到我正在创建一个名为tempAdList的临时广告列表,当If条件求值为true时,我正在创建一个名为ad_list的列表。我将附加到ad_列表,所以我希望每次if语句计算为true时,都会将一个包含4个广告的新列表附加到ad_列表,但无论出于何种原因,我都会得到下面的输出,而这不是我要寻找的。我做错了什么 ads = Advert.objects.all() counter =

我知道在stackoverflow上有很多类似的问题,但它们似乎并没有解决我的问题。如果您查看下面的代码,您可以看到我正在创建一个名为tempAdList的临时广告列表,当If条件求值为true时,我正在创建一个名为ad_list的列表。我将附加到ad_列表,所以我希望每次if语句计算为true时,都会将一个包含4个广告的新列表附加到ad_列表,但无论出于何种原因,我都会得到下面的输出,而这不是我要寻找的。我做错了什么

ads = Advert.objects.all()

counter = 1
tempAdList = []
ad_list = []

for i, ad in enumerate(ads):
    tempAdList.append(ad)
    if counter == 4:
        # print(tempAdList)
        ad_list.append(tempAdList)
        print(ad_list)
        tempAdList.clear()
        counter = 0
    counter += 1

    adsNum = len(ads)
    # print("i = {} and adsNum = {}".format(i, adsNum))
    if i == adsNum -1 and adsNum % 4 != 0:
        ad_list.append(tempAdList)

输出:

如果您只需要一个列表列表,其中内部列表有4个元素。 您可以尝试以下方法:

new_list = [ads[i:i+4] for i in range(0, len(ads), 4)] 
在列表上使用clear方法也会影响对它的所有引用,例如

>>a = [1, 2, 3]
>>b = a
>>a.clear()
>>print('a =',a)
a = []
>>print('b =',b)
b = []
因此,在ad_list.appendtempAdList中要做的是重复将对同一对象的引用添加到ad_list中,即每次更新tempAdList时,对这些引用中的每一个都进行相同的更新。您真正想做的是用新对象重置tempAdList,因此将tempAdList.clear替换为tempAdList=[]。

每次执行tempAdList.clear时,您都会清除列表中的所有元素。但因为您将列表附加到ad_列表,所以基本上也在那里清除了它。所以你少了一张单子。这是因为列表被引用而不是重新创建的性质。您想要的是在追加时从tempAdlist创建一个列表,如:ad_list.appendlisttempAdlist这样它将是tempAdlist中的一个全新列表。基本上,您的代码变成:

ads=Advert.objects.all 计数器=1 临时列表=[] 广告列表=[] 就我而言,广告中的广告: tempAdList.appendad 如果计数器==4: 打印临时列表 ad_list.appendlisttempAdList 打印列表 tempAdList.clear 计数器=0 计数器+=1 adsNum=lenads printi={}和adsNum={}。formati,adsNum 如果i==adsNum-1和adsNum%4!=0: ad_list.appendlisttempAdList
请提供示例输入或运行案例以及所需输出。请检查此项,您将发现此问题已得到回答