gpt4 book ai didi

python - append 到覆盖先前值的元组

转载 作者:太空宇宙 更新时间:2023-11-03 15:23:38 24 4
gpt4 key购买 nike

我正在使用 arcpy 获取形状文件的所有多段线。 SearchCursor 返回一个游标,以便我可以遍历形状文件的所有特征。问题是我想保存游标返回的所有对象供以后使用。

import arcpy
from arcpy import env

env.workspace = r"C:\GIS Data\GIS data"

desc = arcpy.Describe("River.shp")
shapefieldname = desc.ShapeFieldName

rows = arcpy.SearchCursor("River.shp")

featureList = ()

for row in rows:
feat = row.getValue(shapefieldname)

featureList = featureList + (feat, )

print "%i %i" % (featureList[-1].firstPoint.X, featureList[-1].firstPoint.Y)
print "%i %i" % (featureList[-1].lastPoint.X, featureList[-1].lastPoint.Y)

print

print "---------------------------------------------------------------"

for feat in featureList:
print "%i %i" % (feat.firstPoint.X, feat.firstPoint.Y)
print "%i %i" % (feat.lastPoint.X, feat.lastPoint.Y)
print

元组应该包含游标返回的所有对象。但它只有最后一个元素重复 size 的元组次数。

3610930 2135882 3611593 2134453

3611806 2134981 3611593 2134453

3614160 2136164 3617432 2131734

3611593 2134453 3617432 2131734

3617432 2131734 3620568 2127591

3620568 2127591 3620785 2127423

3617980 2126657 3620568 2127591

3616768 2129454 3617948 2126649

3617948 2126649 3617980 2126657

3615102 2128889 3617587 2126510

3617587 2126510 3617948 2126649

3617624 2126416 3617980 2126657

3613129 2128176 3615155 2125617

3615155 2125617 3617587 2126510

3615086 2125515 3615155 2125617


3615086 2125515 3615155 2125617

3615086 2125515 3615155 2125617

3615086 2125515 3615155 2125617

3615086 2125515 3615155 2125617

3615086 2125515 3615155 2125617

3615086 2125515 3615155 2125617

3615086 2125515 3615155 2125617

3615086 2125515 3615155 2125617

3615086 2125515 3615155 2125617

3615086 2125515 3615155 2125617

3615086 2125515 3615155 2125617

3615086 2125515 3615155 2125617

3615086 2125515 3615155 2125617

3615086 2125515 3615155 2125617

3615086 2125515 3615155 2125617

起初,我尝试过使用列表。当我使用 'append()' 方法时,也为列表找到了相同的输出。由于元组是不可变数据结构,+ 怎么能覆盖元组之前的所有元素。虽然这段代码是为 arcpy 编写的,但我想问题不是特定于 arcgis。

最佳答案

这表明 row.getValue() 不断返回对同一对象的引用 ,并不断更新。

要验证,请尝试在第一个中打印 id(feat)id(feat.firstPoint)id(feat.lastPoint)循环,并查看是否有任何 id 在迭代之间保持不变。如果他们中的任何一个这样做,那就是你的问题。

As tuple is immutable data structure, how can + overwrites all the previous elements of tuple.

事实并非如此。元组是不可变的,因为您不能在不创建新元组的情况下从中添加或删除元素。您也不能更改元组元素的值。但是,如果该元素是对可变对象的引用,您可以自由修改对象本身。这就是我怀疑这里发生的事情:您对同一个对象有多个引用;当您修改一个时,它们似乎都发生了变化。

关于python - append 到覆盖先前值的元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10815149/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com