如果该子列表符合条件,我需要从Python中的列表中删除子列表

时间:2017-03-22 21:28:14

标签: python list indexing pop sublist

如果子列表中的第二个值为None,我想将其从父列表中弹出,但是我得到索引超出范围错误。

    Error:

    Runtime error 
    Traceback (most recent call last):
    File "<string>", line 2, in <module>
    IndexError: list index out of range



listSeq=[[134, None, datetime.datetime(2016, 2, 12, 0, 0)], [135, None, datetime.datetime(2016, 2, 12, 0, 0)], [136, None, datetime.datetime(2016, 2, 12, 0, 0)], [138, 1, datetime.datetime(2016, 2, 12, 0, 0)], [139, None, datetime.datetime(2016, 2, 12, 0, 0)], [140, None, datetime.datetime(2016, 2, 12, 0, 0)], [141, None, datetime.datetime(2016, 2, 12, 0, 0)], [142, 3, datetime.datetime(2016, 2, 12, 0, 0)], [144, None, datetime.datetime(2016, 2, 12, 0, 0)], [145, 2, datetime.datetime(2016, 2, 12, 0, 0)]]

for x in range(len(listSeq)):
    if listSeq[x][1]!=None:
        listSeq.pop(x)

这是我使用的解决方案,它到目前为止工作,虽然我只测试了两次,我仍在检查记录,以确保它正常工作。

import datetime
import arcpy
import os
arcpy.env.overwriteOutput=True
mxd=arcpy.mapping.MapDocument("CURRENT")
outWrkspc=r"c:\Project_Status"
fields=["RNG","SEC","STD_DESCRIPTION","AREA_SF"]
df=arcpy.mapping.ListDataFrames(mxd,"Layers")[0]
listLayers=arcpy.mapping.ListLayers(mxd,"LD_BOUNDARY_POLY",df)[0]


nameDate=datetime.date.today()
dupTable=os.path.join(outWrkspc,str(listLayers)+"_"+str(nameDate))
arcpy.FindIdentical_management("LD_BOUNDARY_POLY",dupTable,fields,output_record_option="ONLY_DUPLICATES")
arcpy.AddJoin_management("LD_BOUNDARY_POLY","OBJECTID",dupTable,"IN_FID")
listSeq=[]
maxId=[]
keepId=[]
keepListIndex=[]
cursor=arcpy.da.SearchCursor("LD_BOUNDARY_POLY","*")
for row in cursor:
    listSeq.append([row[0],row[-1],row[-18]])
for x in range(len(listSeq)):
    if listSeq[x][1]is not None:
        keepId.append(listSeq[x])


for x in keepId:
    if not x[1] in keepListIndex:
        keepListIndex.append(x[1])

for z in keepListIndex:

    currenTimetList=[]

    for y in keepId:

        if z==y[1]:
            currenTimetList.append(y[2])
    maxTime=max(currenTimetList)
    maxId.append([maxTime,z])
delList=[]

for x in maxId:
    for n in keepId:
        if x[0]!=n[2] and x[1]==n[1]:
            delList.append(n[0])

arcpy.RemoveJoin_management("LD_BOUNDARY_POLY")

for x in delList:
    whereClause="""OBJECTID = %s"""%x
    with arcpy.da.UpdateCursor("LD_BOUNDARY_POLY","OBJECTID",whereClause) as uc:
        for row in uc:
            uc.deleteRow() 

1 个答案:

答案 0 :(得分:3)

通常最好通过制作您希望保留的项目的新列表来过滤列表。

>>> QColor(0,128,80).getHsl()
(157, 255, 64, 255)