【问题标题】:How to loop through a nested loop and enumerate如何遍历嵌套循环并枚举
【发布时间】:2012-11-08 03:54:18
【问题描述】:

我的嵌套循环有问题。我得到了一个输出,但它为我的数据集中的字段数复制了每个输出。

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 的每个值对应于每个唯一字段,只要行相互匹配,即ij。但是,更确切地说是返回一个包含 13 行数据的对象,这些数据对应于与new_fields 中的值相对应的列值。我得到 13 * 55 个值,即 715 行,其中大约 50% 的数据缺少值。我的输出数据表有点像一个三角形的数据。

我不确定我的问题是否有意义,但如果确实如此,对我的嵌套循环策略的任何帮助都会有所帮助。我认为我的问题是我对循环实际在做什么的概念化,以及我的if 语句可能在做什么。

【问题讨论】:

  • 你应该同时迭代enumerate(dat)enumerate(new_fields),而不是一个在另一个里面......
  • @avasal,感谢您的提示。但是,我将如何同时做到这一点?
  • @avasal,我使用了zip 函数,但我仍然得到相同的输出。有什么建议吗?
  • 我不确定我的回答是否对你想要做的事情有意义,因为我不完全确定你的对象是什么或者你所说的行和列是什么意思。如果我不理解,请随时编辑您的问题,如果我不理解,请对我的回答发表评论。

标签: python list loops if-statement nested-loops


【解决方案1】:

正如 avasal 所说,您希望同时迭代 dat 和 new_fields,最简单的方法是使用 zip

for d, field in zip(dat, new_fields):
    feature.SetField(field, d)
    layer.CreateFeature(feature)

【讨论】:

  • 谢谢@acjohnson55。我确实这样做了,但不幸的是,我仍然得到相同的输出。和之前的嵌套循环一样。我将继续调查为什么会发生这种情况。但是感谢 zip 功能的解释!我将编辑我的代码,希望能更好地传达我的问题。
  • 我认为现在可能发生的情况是,datdata_body 中的循环的第一部分,将xy(列表new_fields 中的值)与dat 中的位置 5 和 6,它们是 data_body 中的行。也许,我什至不需要第二个循环,只需要找出一种方法来循环遍历new_fieldsdata_body 一次并将dat 的每个值与其各自的new_fields 位置相关联。仅供参考:(len(new_fields) = 55) 和 (len(data_body) = 13),每行 data_body = len 共 55)
  • SetField 期望什么?您是否尝试为dat_body 中的每个项目分配相同的new_fields 值?也许你想要的只是迭代dat,然后做feature.SetField(new_fields, d)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-16
  • 2011-03-24
  • 2017-09-01
  • 2021-11-20
  • 1970-01-01
相关资源
最近更新 更多