离开循环

时间:2018-04-11 04:47:45

标签: python-3.x list jagged-arrays

全部 -

对于使用Python 3.x的Selenium webscraper - 我试图得到一个打印输出,它取决于锯齿状列表中每个1d索引的长度,在这种情况下只有2d。该列表名为masterViewsList,其中包含的列表是名为viewsList的列表的版本。下面是我如何构建masterViewsList的{​​{1}}列表:

viewsList

打印输出是这样的:

from selenium import webdriver
import os

masterLinkArray = []
masterViewsList = []

# a bunch of code here that I cut out for simplicity's sake

for y in range(0, len(masterLinkArray)):
    browser = webdriver.Chrome(chromePath)
    viewsList = []
    browser.get(masterLinkArray[y])
    productViews = browser.find_elements_by_xpath("// *[ @ id = 'lightSlider'] / li / img")
    counter = - 1
    for a in productViews:
        counter = counter + 1
        viewsList.append(a.get_attribute('src'))
        print(viewsList[counter])
        print(len(viewsList))
    masterViewsList.append(viewsList)
    if y == 10:
        print(masterViewsList[y])
        print(len(masterViewsList[y]))
    del viewsList[:]

print(len(masterLinkArray))
print(len(masterViewsList))
print(len(masterViewsList[0]))
print(len(masterViewsList[1]))
print(len(masterViewsList[10]))

正如您所看到的,["https://us.testcompany.com/images/is/image/lv/1/PP_VP_L/544_PM2_Front%20view.jpg?wid=140&hei=140","https://us.testcompany.com/images/is/image/lv/1/PP_VP_L/544_PM1_Side%20view.jpg?wid=140&hei=140","https://us.testcompany.com/images/is/image/lv/1/PP_VP_L/544_PM1_Interior%20view.jpg?wid=140&hei=140","https://us.testcompany.com/images/is/image/lv/1/PP_VP_L/544_PM1_Other%20view.jpg?wid=140&hei=140","https://us.testcompany.com/images/is/image/lv/1/PP_VP_L/544_PM1_Other%20view2.jpg?wid=140&hei=140"] 5 79 79 0 0 0 masterLinkArray都不是空的 - 它们长达79个。此外,masterViewsList打印出一个实际的非空列表,一个识别长度为5.奇怪的是,一旦我离开print(masterViewsList[y])循环,for y打印到“0”。这些类似的问题: Find the dimensions of a multidimensional Python arrayFind length of 2D array Python, 两者都表明len(masterViewsList[*any integer*])是获取列表中列表长度的正确方法,但在我的情况下,这似乎并不是一致的。

1 个答案:

答案 0 :(得分:0)

masterViewlist为空,是您在其上调用len方法的点。这就是len方法的所有结果都为零的原因。

在代码的第一个简短版本中,这一点并不清楚,因为该版本中缺少以下代码行:

del viewsList[:]

将viewList附加到masterViewList后,这行代码会导致masterViewlist再次为空。这是因为del命令删除了对此viewList的所有引用,包括masterViewlist中的引用。您可以删除viewList的del,因为每次回到外部for循环的开头时都会以新的viewList开头。