如果子列表中的第二个值为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()
答案 0 :(得分:3)
通常最好通过制作您希望保留的项目的新列表来过滤列表。
>>> QColor(0,128,80).getHsl()
(157, 255, 64, 255)