Python 而循环被忽略
大家好, 该脚本的想法是从我公司网站的目录页面抓取图像链接,并将其更改为具有更高分辨率的图像链接和图像格式过滤器,其中要过滤的变量位于链接本身,在本例中为大写字母p。之后,将使用链接生成csv 转换、过滤和写入csv都很好,但我的问题是我不想要所有的80个产品,我只想要8个在列表中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= [
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解决方案。我在这里的工作已经完成。非常感谢您解释我的错误,并对我的代码中发生的情况进行实际解释:)非常感谢您解释我的错误,并对我的代码中发生的情况进行实际解释:)