我的嵌套循环出了问题。我得到一个输出,但它重复了我的数据集中的字段数的每个输出。
for dat in data_body:
x = float(dat[5])
y = float(dat[6])
point = ogr.Geometry(ogr.wkbPoint)
point.AddPoint(x,y)
feature.SetGeometry(point)
for i, d in enumerate(dat):
for j, field in enumerate(new_fields):
if i == j:
feature.SetField(field, d)
layer.CreateFeature(feature)
对于我的数据集,列表data_body
列表包含13行数据和55列(即55个位置)。对于我的列表new_fields
,我有55个值,它们对应于data_body
列表列表。因此,在我的对象feature.SetField(field, d)
的代码块中。我应该让data_body的每个值对应于每个唯一字段,只要行彼此匹配,即i
和j
。但是,而是使用与new_fields
中的值对应的列值对应的13行数据来获取对象。我得到13 * 55的值,即715行,其中约50%的数据缺少值。我的输出数据表类似于三角形数据。
我不确定我的问题是否有意义,但如果确实如此,那么我对嵌套循环策略的任何帮助都会有所帮助。我认为我的问题是我对循环实际做的概念,以及我的if
语句可能正在做什么。
答案 0 :(得分:2)
正如avasal所说,你想同时迭代dat和new_fields,最简单的方法是使用zip
:
for d, field in zip(dat, new_fields):
feature.SetField(field, d)
layer.CreateFeature(feature)