如何通过索引删除列表中的元素

时间:2017-12-12 09:36:46

标签: python

enter image description here

我要删除所有代码='A'记录,下面是我的脚本,问题是,当我删除记录1235时,1236将成为第二行(之前是第三行)。所以当i = 3时,1236不会被删除,1237将被删除。怎么解决?提前谢谢!

 for i in range(1,20):
     client=driver.find_element_by_xpath("//tbody//tr["+str(i)+"]//td[@class='client_Name ng-binding'][1]").text
     code=driver.find_element_by_xpath("//tbody//tr["+str(i)+"]//td[@class='ng-binding'][1]").text
     if client!='A':
         continue
     #delete action
     driver.find_element_by_xpath("//tbody//tr["+str(i)+"]//td[@name='Project']//i[@class='fa fa-trash']").click()

2 个答案:

答案 0 :(得分:1)

通过递增索引删除元素来迭代列表或数组是很棘手的,因为正如您所发现的,删除元素会更改具有更高索引的元素的索引。

解决方案是反向迭代,从最高索引开始并递减它。这样删除元素不会影响尚未访问过的元素的索引。

 for i in range(19, 0, -1):
     client=driver.find_element_by_xpath("//tbody//tr["+str(i)+"]//td[@class='client_Name ng-binding'][1]").text
     code=driver.find_element_by_xpath("//tbody//tr["+str(i)+"]//td[@class='ng-binding'][1]").text
     if client!='A':
         continue
     #delete action
     driver.find_element_by_xpath("//tbody//tr["+str(i)+"]//td[@name='Project']//i[@class='fa fa-trash']").click()

答案 1 :(得分:0)

这不是你必须放的条件,它是一段时间:

for i in range(1,20):
    client=driver.find_element_by_xpath("//tbody//tr["+str(i)+"]//td[@class='client_Name ng-binding'][1]").text    
    code=driver.find_element_by_xpath("//tbody//tr["+str(i)+"]//td[@class='ng-binding'][1]").text
    while client!='A':
        driver.find_element_by_xpath("//tbody//tr["+str(i)+"]//td[@name='Project']//i[@class='fa fa-trash']").click()
        client=driver.find_element_by_xpath("//tbody//tr["+str(i)+"]//td[@class='client_Name ng-binding'][1]").text  

这意味着你在同一条线上循环直到它不是'A',然后你继续前进。