离开循环后列表(锯齿状列表)中列表的长度变为零
Length of list within list (jagged list) becomes zero after leaving loop
全部 -
对于使用 Python 3.x 的 Selenium webscraper - 我试图获得一个打印输出,该打印输出取决于锯齿状列表中每个 1d 索引的长度,在本例中仅为 2d。该列表名为 masterViewsList
,它包含的列表是名为 viewsList
的列表的版本。下面看看我的列表 masterViewsList
of 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
和 masterViewsList
都不为空 - 它们的长度为 79。此外,print(masterViewsList[y])
打印出一个实际的非空列表,一个识别长度为 5 的列表。奇怪的是,一旦我离开 for y
循环,len(masterViewsList[*any integer*])
打印出“0”。这些类似的问题:
Find the dimensions of a multidimensional Python array,
Find length of 2D array Python,
两者都表明 len(array[*integer*])
是获取列表中列表长度的正确方法,但在我的情况下,这似乎无法始终如一地工作。
masterViewlist 在您调用 len 方法的地方是空的。这就是 len 方法的所有结果都将为零的原因。
在您的代码的第一个简短版本中,这并不清楚,因为该版本中缺少以下代码行:
del viewsList[:]
将viewList附加到masterViewList后,这行代码导致masterViewlist再次为空。这是因为 del 命令删除了对该视图列表的所有引用,包括 masterViewlist 中的引用。您可以删除 viewList 的这个 del,因为每次回到外部 for 循环的开头时,您都会从一个新的 viewList 开始。
全部 -
对于使用 Python 3.x 的 Selenium webscraper - 我试图获得一个打印输出,该打印输出取决于锯齿状列表中每个 1d 索引的长度,在本例中仅为 2d。该列表名为 masterViewsList
,它包含的列表是名为 viewsList
的列表的版本。下面看看我的列表 masterViewsList
of 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
和 masterViewsList
都不为空 - 它们的长度为 79。此外,print(masterViewsList[y])
打印出一个实际的非空列表,一个识别长度为 5 的列表。奇怪的是,一旦我离开 for y
循环,len(masterViewsList[*any integer*])
打印出“0”。这些类似的问题:
Find the dimensions of a multidimensional Python array,
Find length of 2D array Python,
两者都表明 len(array[*integer*])
是获取列表中列表长度的正确方法,但在我的情况下,这似乎无法始终如一地工作。
masterViewlist 在您调用 len 方法的地方是空的。这就是 len 方法的所有结果都将为零的原因。
在您的代码的第一个简短版本中,这并不清楚,因为该版本中缺少以下代码行:
del viewsList[:]
将viewList附加到masterViewList后,这行代码导致masterViewlist再次为空。这是因为 del 命令删除了对该视图列表的所有引用,包括 masterViewlist 中的引用。您可以删除 viewList 的这个 del,因为每次回到外部 for 循环的开头时,您都会从一个新的 viewList 开始。