循环中的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,以便为上面几行复制的值的末尾指定一个值。天哪,我不知道你可以将变量指定为索引位置!这就是我所需要的。我试着把第二行改成第二行,但翻译不喜欢。我把它改回来了,所以他们都是“排”的,效果很好。