Python正在向我不想要的数组添加值

时间:2014-10-22 19:00:50

标签: python arrays arcpy

我试图获取一个字段名称数组,将它们复制到一个新数组中,然后根据它们与原始数组中字段名称的相似性,将其他字段名称添加到新数组中。 这将让我以几种不同的方式在表中运行光标...第一个获取要显示的文本的字符长度,第二个获取文本,并将格式信息附加到开头和结尾文本。

" PointData"表格包含以下字段名称:PrimeKey','标签'' Field1',' Field2',' Field3', ' fb_Field1',' fp_Field1'格式化信息保存在fb_和fp_字段中。

fields = ['PrimeKey', 'Label', 'Field1', 'Field2', 'Field3']
table = "PointData"
AllFields = fields
for field in fields:
bfldnm = 'fb_' + field
pfldnm = 'fp_' + field
bfld = arcpy.ListFields(table, bfldnm)
pfld = arcpy.ListFields(table, pfldnm)
if bfld:
    AllFields.append(bfld[0].name)
bfld = []
if pfld:
    AllFields.append(pfld[0].name)
pfld = []

生成的字段数组在运行此for循环后最终会包含两个附加字段名称(' fb_Field1'和' fp_Field1')...我可以'弄清楚为什么......我只想将这两个值添加到AllFields数组中。

2 个答案:

答案 0 :(得分:2)

@ njzk2已经提到了这一点,但我想我会添加一个解释这个理由的答案。 Python通过pass-by-object-reference完成所有工作。简而言之,这意味着当你完成任务时:

AllFields = fields

你实际上并没有制作副本。有几种方法可以在python中进行复制,最简单的方法是切片黑客:

AllFields = fields[:]

其他内容在python的copy文档中有详细介绍。例如:

import copy
AllFields = copy.copy(fields)

python传统上也使用snake case,因此AllFields应为all_fields

答案 1 :(得分:0)

感谢njzk2

   fields = ['PrimeKey', 'Label', 'Field1', 'Field2', 'Field3']
   table = "PointData"
   AllFields = fields[:]
   for field in fields:
    bfldnm = 'fb_' + field
    pfldnm = 'fp_' + field
    bfld = arcpy.ListFields(table, bfldnm)
    pfld = arcpy.ListFields(table, pfldnm)
    if bfld:
        AllFields.append(bfld[0].name)
    bfld = []
    if pfld:
        AllFields.append(pfld[0].name)
    pfld = []