Python 而循环被忽略

Python 而循环被忽略,python,python-2.7,while-loop,Python,Python 2.7,While Loop,大家好, 该脚本的想法是从我公司网站的目录页面抓取图像链接,并将其更改为具有更高分辨率的图像链接和图像格式过滤器,其中要过滤的变量位于链接本身,在本例中为大写字母p。之后,将使用链接生成csv 转换、过滤和写入csv都很好,但我的问题是我不想要所有的80个产品,我只想要8个在列表中nl 链接列表包含如下元素 注意:变量比率和创造性(inputnumber-1)由命令行输入定义。假设输入是ratio=P和creatives=9-1 注2:为了更快地进行测试,链接列表目前限制为15个元素 nl= [

大家好,

该脚本的想法是从我公司网站的目录页面抓取图像链接,并将其更改为具有更高分辨率的图像链接和图像格式过滤器,其中要过滤的变量位于链接本身,在本例中为大写字母p。之后,将使用链接生成csv

转换、过滤和写入csv都很好,但我的问题是我不想要所有的80个产品,我只想要8个在列表中
nl

链接
列表包含如下元素

注意:变量比率和创造性(inputnumber-1)由命令行输入定义。假设输入是
ratio=P
creatives=9-1

注2:为了更快地进行测试,链接列表目前限制为15个元素

nl= []
string1= "https://rndr.mywebsite.com/media/catalog/product/cache/x800/"
string2= ".jpg"

while len(nl) <= creatives:                        
    for index in range(len(links)):
        if "P" in "".join(links[index].split("/", 12)[10]) and "P" in ratio:
            print("YEAH", len(nl))
            nl.extend([string1 + "/".join(links[index].split("/", 11)[8:11]) + string2])
        else:
            print ("Ups", len(nl))
print (nl)

正如您所看到的,过滤和转换工作正常,但在Coldspeed提到的列表
nl

中有9个链接后应该停止,在内部循环中,您将一整批项目添加到
nl
,从而超出了限制。要修复它,您可以去掉while循环,改为执行以下操作:

for index in range(len(links)):
    if "P" in "".join(links[index].split("/", 12)[10]) and "P" in ratio:
        print("YEAH", len(nl))
        nl.append(string1 + "/".join(links[index].split("/", 11)[8:11]) + string2)
        if len(nl) > creatives: 
            break
    else:
        print ("Ups", len(nl))

正如Coldspeed所提到的,在内部循环中,您向
nl
添加了一整批项目,因此超出了限制。要修复它,您可以去掉while循环,改为执行以下操作:

for index in range(len(links)):
    if "P" in "".join(links[index].split("/", 12)[10]) and "P" in ratio:
        print("YEAH", len(nl))
        nl.append(string1 + "/".join(links[index].split("/", 11)[8:11]) + string2)
        if len(nl) > creatives: 
            break
    else:
        print ("Ups", len(nl))

添加两个这样的打印语句可以帮助您准确地了解发生了什么:

while len(nl) <= creatives:     
    print('outer loop')                   
    for index in range(len(links)):
        print('inner loop')
        ...

while len(nl)添加两条这样的打印语句可以帮助您准确了解发生了什么:

while len(nl) <= creatives:     
    print('outer loop')                   
    for index in range(len(links)):
        print('inner loop')
        ...

while len(nl)您正在while循环中执行for循环。while循环只会在完成第一个for循环时检查其条件,此时您已经循环了
链接中的每个元素

例如

i=0
当我<10时:
对于范围(20)内的z:
i=z
印刷品(一)

将一直打印到19,因为只有当内部for循环完成时,才会检查while循环的前提条件

您正在while循环中执行for循环。while循环只会在完成第一个for循环时检查其条件,此时您已经循环了
链接中的每个元素

例如

i=0
当我<10时:
对于范围(20)内的z:
i=z
印刷品(一)

将一直打印到19,因为只有当内部for循环完成时,才会检查while循环的前提条件

不一定,因为这是在循环中进行的。您使用另一个列表扩展
nl
,我不知道另一个循环中的大小。在进行下一次检查之前,您可能超出了限制。不一定,因为您是在循环中执行此操作的。您正在使用另一个列表扩展
nl
,我不知道另一个循环中的大小。在下一次检查之前,您可能超出了限制。对不起,没有看到您已经发布了。将您的答案与我的链接。:)好吧,你的方式比我最初的想法更聪明。谢谢你的回答和修改我的代码:)对不起,没有看到你已经发布了。将您的答案与我的链接。:)好吧,你的方式比我最初的想法更聪明。谢谢你的回答和修改我的代码:)啊,谢谢你解释我在那里构建了什么。我已经摆弄了一下break,但没有意识到它检查状况的问题。请查看您提供的链接:)@NilsOle It链接到您已经接受的Błotosmętek解决方案。我在这里的工作已经完成了。啊,谢谢你解释我在那里构建的东西。我已经摆弄了一下break,但没有意识到它检查状况的问题。请查看您提供的链接:)@NilsOle It链接到您已经接受的Błotosmętek解决方案。我在这里的工作已经完成。非常感谢您解释我的错误,并对我的代码中发生的情况进行实际解释:)非常感谢您解释我的错误,并对我的代码中发生的情况进行实际解释:)