Python顶层for循环只运行一次而不是遍历列表

Posted

技术标签:

【中文标题】Python顶层for循环只运行一次而不是遍历列表【英文标题】:Python top layer for loop only running once instead of iterating over list 【发布时间】:2021-03-17 10:38:00 【问题描述】:

我正在尝试遍历列表,如果项目及其各自的已售商品数量,以便创建上个月每件商品的已售商品列表。为此,我创建了一个嵌套的 for 循环,该循环为每个项目获取上个月售出的项目并将其附加到列表中。但是,当我运行循环时,顶层仅运行一次,并且不会遍历其余项目。当计数器应该是列表的 len 时,计数器的输出为 1

count=0
obj=zip(Grouped_DF['item_id'], Grouped_DF['item_cnt_day'])
item_cnt_day_minus_1=[]
counter=0
for item, itm_cnt in obj:
    counter+=1
    for x,y in obj:
        if item==x and count==0:
            count+=1
            item_cnt_day_minus_1.append(0)
        if item==x and count==1:
            item_cnt_day_minus_1.append(itm_cnt)
            count+=1
            count=y
        if item==x and count>1:
            item_cnt_day_minus_1.append(y)
            count=y
    count=0

【问题讨论】:

顺便说一句,我确定 count+=1; count=y 不是您在第二个 if 中想要的。 好的,你正在通过同一个zip对象迭代两次。 【参考方案1】:

您需要为每个 for 循环生成单独的 zip 对象:

item_cnt_day_minus_1=[]
counter = 0
count = 0
for item, itm_cnt in zip(['a', 'b', 'c'], [42, 43, 44]):  # sample data I invented
    counter += 1
    for x,y in zip(['a', 'b', 'c'], [42, 43, 44]):
        if item == x and count == 0:
            count += 1
            item_cnt_day_minus_1.append(0)
        if item == x and count == 1:
            item_cnt_day_minus_1.append(itm_cnt)
            count += 1
            count = y
        if item == x and count > 1:
            item_cnt_day_minus_1.append(y)
            count = y
    count=0

print(counter, item_cnt_day_minus_1)

输出:

3 [0, 42, 42, 0, 43, 43, 0, 44, 44]

【讨论】:

以上是关于Python顶层for循环只运行一次而不是遍历列表的主要内容,如果未能解决你的问题,请参考以下文章

为什么我的for循环只运行2次而不是10次?

for 循环是不是只在 python 类中运行一次?

为啥for循环遍历python中的1个项目? [关闭]

Python,Apscheduler 问题——作业运行两次而不是一次

为啥 for 循环不遍历列表中的每个项目?

Python for 循环在第一次迭代后停止