循环中的python从列表中追加
我有一个循环,我用它来分配各个值,但我需要在分配值的末尾添加一个字母。有这样的工作吗循环中的python从列表中追加,python,list,for-loop,Python,List,For Loop,我有一个循环,我用它来分配各个值,但我需要在分配值的末尾添加一个字母。有这样的工作吗 alpha = ['a', 'b', 'c', 'd', 'e', 'f'] place = 0 print alpha [%d] %place place = place + 1 当使用实值时,它可以工作,但是当它被用作输出时,我如何遍历这个列表呢?我使用的代码是用于ArcGIS的,因此我将粘贴下面的代码以供参考 for row in rows1: name = row.getVal
alpha = ['a', 'b', 'c', 'd', 'e', 'f']
place = 0
print alpha [%d] %place
place = place + 1
当使用实值时,它可以工作,但是当它被用作输出时,我如何遍历这个列表呢?我使用的代码是用于ArcGIS的,因此我将粘贴下面的代码以供参考
for row in rows1:
name = row.getValue("Name")
print name
arcpy.SelectLayerByAttribute_management(mapLyr1, "NEW_SELECTION", '"FID" = %s' %searchrow)
searchrow = searchrow + 1
arcpy.SelectLayerByLocation_management(mapLyr2, "HAVE_THEIR_CENTER_IN", mapLyr1, 0, "ADD_TO_SELECTION")
for row in rows2:
row.tile = name + A
rows2.updateRow(row)
因此,第一个循环选择一个较大的特征,并用于选择其中较小的特征。然后将大功能的名称指定给其中的小功能,但我需要在末尾添加一个字母,以保持每个小功能的名称唯一。我会这样做:
import string
for row in rows1:
name = row.getValue("Name")
print name
arcpy.SelectLayerByAttribute_management(mapLyr1, "NEW_SELECTION", '"FID" = %s' %searchrow)
searchrow = searchrow + 1
arcpy.SelectLayerByLocation_management(mapLyr2, "HAVE_THEIR_CENTER_IN", mapLyr1, 0, "ADD_TO_SELECTION")
for row,letter in zip(rows2,string.letters[:len(rows2)]):
row.tile = name + letter
rows2.updateRow(row)
但你必须解决这件事。它在任何地方都没有定义。正如@Mike所提到的,不要两次使用同一个名称“row”,在第一个for循环和内部for循环中使用它。您可能应该在第1行中使用第1行,在第2行中使用第2行,但您必须先定义第2行。答案是直接将变量输入列表索引定位器。我不知道你能做到。我在脚本的开头添加了“place”,因此它总是以0开头,然后我添加了一个if语句,这样它将重复自己,直到16。我在每个大特性中都有16个小特性,因此这可以保持它的运行,而不会出现索引超出范围的错误。这是我最后的剧本
import arcpy, os
#set map doc and the layer to be used
mxd = arcpy.mapping.MapDocument("Current")
mapLyr1 = arcpy.mapping.ListLayers(mxd, "NEW_BiState_Grid400_IowaSP") [0]
mapLyr2 = arcpy.mapping.ListLayers(mxd, "GridIndexFeatures20") [0]
#alpha will be assigned a letter to rows2 update, there are 16
place = 0
alpha = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p']
name = str()
searchrow = 0
rows1 = arcpy.SearchCursor(mapLyr1, "", "", "Name")
rows2 = arcpy.UpdateCursor(mapLyr2, "", "", "tile")
rows = arcpy.UpdateCursor(mapLyr2)
for row in rows1:
name = row.getValue("Name")
print name
arcpy.SelectLayerByAttribute_management(mapLyr1, "NEW_SELECTION", '"FID" = %s' %searchrow)
searchrow = searchrow + 1
arcpy.SelectLayerByLocation_management(mapLyr2, "HAVE_THEIR_CENTER_IN", mapLyr1, 0, "ADD_TO_SELECTION")
for row in rows2:
row.tile = name + alpha[place]
rows2.updateRow(row)
place = place + 1
if place == 16:
place = 0
del mxd, rows, rows1, rows2, searchrow
谢谢你的帮助!我知道这可能很愚蠢,但我学到了一些新东西。:-)我确实认为我必须使用%d,因为这是我在SelectLayerByAttribute函数中必须做的。再次感谢大家的帮助 我不确定是否有错误,但在第二个循环中,将row变量更改为row2。您已经在第一个循环中使用了行。您希望
print alpha[%d]%place
做什么?那根本不是有效的Python代码。我不太理解你的问题。是否要将唯一字符附加到列表的每个元素?这些信是从哪里来的?您的行打印alpha[%d]%place
无效。仔细想想,也许这行应该是print alpha[place]
。这是您的意图吗?我正在尝试遍历alpha,以便为上面几行复制的值的末尾指定一个值。天哪,我不知道你可以将变量指定为索引位置!这就是我所需要的。我试着把第二行改成第二行,但翻译不喜欢。我把它改回来了,所以他们都是“排”的,效果很好。