2015-06-05 45 views
0

在ArcGis中,我想计算我绘制的道路网络的连通性。因此,根据相互交叉的街道的数量,对各道路交叉口赋予价。然而,在当前情况下,工具箱还将包含两条线(例如以曲线形式),它们以2的价相互连接。我需要删除价格为< 3的列表的所有值,但是因为我几乎没有编程经验,我不知道如何正确地做到这一点。以下是用于计算顶点图层的工具箱中的一段代码。Python:如何从列表中删除价值低于特定值的值

#---------------------------------- 
#Begin of calculating valence field 
gp.addmessage("Begin of calculating valence field") 
#---------------------------------- 

#Make layer of vertices 
#---------------------- 
gp.addmessage("Make layer of vertices") 
desc=gp.Describe(inline) 
shapefieldname = desc.ShapeFieldName 
thesr=desc.SpatialReference 
gp.CreateFeatureClass(gp.workspace,vert, "Point","", "ENABLED", "DISABLED", thesr) 
gp.addfield(vert, "valence", "short") 
listk=[] 
rows=gp.SearchCursor(inline) 
row = rows.Next() 
while row: 
    feat = row.GetValue(shapefieldname) 
    partnum=0 
    partcount=feat.PartCount 
    print partcount 
    while partnum < partcount: 
     part = feat.GetPart(partnum) 
     pnt = part.Next() 
     pntcount = 0 
     thex=pnt.x 
     they=pnt.y 
     thekey=(thex*1000000)+they 
     while pnt: 
      if thekey not in listk: 
       cur = gp.InsertCursor(vert) 
       rowvert = cur.NewRow() 
       rowvert.shape = pnt 
       cur.InsertRow(rowvert) 
       listk.append(thekey) 
      pnt = part.Next() 
      pntcount += 1 
     partnum += 1 
    row=rows.next() 
del row, rows, cur 

# Remove all values valence < 3 
#------------------------------- 
+1

您可能需要阅读[问] – boardrider

+0

这个问题应该被移到http://gis.stackexchange.com/。任何人都可以为移民投票吗? – jotrocken

回答

2

在Python,有你可以做的值列表

# Generate a random list for example. 
import random 
some_list = random.sample(range(30), 4) 

# Keep elements greater than 3. 
filtered_list = [value for value in some_list if value >= 3] 

# The same outcome, another way to write it. 
filtered_list = filter(lambda x: x >= 3, some_list) 

# The same outcome, but written as a loop. 
filtered_list = [] 
for value in some_list: 
    if value >= 3: 
     filtered_list.append(value) 

自从我使用ArcGIS/arcpy之后已经有一段时间了,但我确信FeatureClasses不能像普通的Python lists那样容易处理。关于你的ArcPy中的代码,你可以使用一个UpdateCursor删除行:

# Create an empty FeatureClass from the original. 
with arcpy.UpdateCursor(your_feature_class) as rows: 
    for row in rows: 
     if row.valence <= 2: 
      rows.deleteRow(row) 
1
你的情况

,我想创建一个只包含价> = 3的新名单:

my_list = [1, 12, 4, 3, 7, 2, 0] 
filtered_list = [val for val in my_list if val >= 3] 
print filtered_list # displays [12, 4, 3, 7] 
0

你可以,如果你使用的过滤功能

>>>filter(lambda x : x>3 , [1,2,3,4,5]) 
[4,5]