【问题标题】:How to loop through a nested list, compare the first element to another list, and then append to a new list?如何遍历嵌套列表,将第一个元素与另一个列表进行比较,然后追加到新列表?
【发布时间】:2020-07-10 03:33:37
【问题描述】:

我正在尝试为 CNN 创建三个单独的列表(训练、测试和验证)。
我有三个仅包含图像名称的列表(train_data、test_data、val_data)

train_data = ["img_1.png", "img_2.png"] 
test_data = ["image_3.png", "img_4.png"] 
val_data = ["img_5.png", "img_6.png"]

我有另一个嵌套列表,其中包含深度学习模型的所有图像名称和相关标签

image_annotations = [['img_1.png', 432, 662, 554, 749, 'class'], 
    ['img_1.png', 647, 456, 754, 594, 'class'], ['img_2.png', 598, 659, 897, 
    302, 'class']]

我想在我的image_annotations 列表中运行一个循环,如果图像名称与我的train_data, test_data, val_data 列表中的图像名称相同,那么我想将以下四个数字和类名附加到该列表中。 image_annotations 列表具有相同图像的多个列表,但边界框编号不同。 我想这可能很简单,但我无法弄清楚。

【问题讨论】:

  • 你的问题意味着你最终会得到一个这样的列表:train_data=["img_1.png", "img_2.png", 432, 662, 554, 749,598, 659, 897, 302 ],这是你想要的吗?
  • @Rphad 很好,不,这不是我需要的最终格式。我需要的最终列表类似于 train_data = [["img_1.png", 546, 789, 987, 567, 'class'], ["img_1.png", 435, 546, 768, 459, 'class'] , ["img_2.png", 234, 456, 763, 946, 'class']]]

标签: python list loops deep-learning nested-lists


【解决方案1】:

我认为这可能会对您有所帮助:

train_data_full = []
for t_d in train_data:
    for i_a in image_annotations:
        if t_d in i_a:
            train_data_full.append(i_a)

【讨论】:

    【解决方案2】:

    这将是您问题的答案

    train_data = ["img_1.png", "img_2.png"] 
    test_data = ["image_3.png", "img_4.png"] 
    val_data = ["img_5.png", "img_6.png"]
    image_annotations = [['img_1.png', 432, 662, 554, 749, 'class'],['img_1.png', 647, 456, 754, 594, 'class'],['img_2.png', 598, 659, 897, 302, 'class']]
    my_lists = [train_data, test_data, val_data]
    for im in image_annotations:
        for k in my_lists:
            if im[0] in k:
                for i in range(1,5):
                    k.append(im[i])
    
    for list in my_lists:
        print(list)
    

    【讨论】:

      【解决方案3】:

      你可以使用:

      train_data = ["img_1.png", "img_2.png"] 
      test_data = ["image_3.png", "img_4.png"] 
      val_data = ["img_5.png", "img_6.png"]
      
      image_annotations = [['img_1.png', 432, 662, 554, 749, 'class'], 
          ['img_1.png', 647, 456, 754, 594, 'class'], ['img_2.png', 598, 659, 897, 
          302, 'class']]
      
      # get a maping with all the img names and their value
      d = {}
      for e in image_annotations:
          d.setdefault(e[0], []).append(e)
      
      
      # set new values to data variables accordding to dict d
      for l in train_data, test_data, val_data:
          l[:] = [e for i in l for e in d.get(i, [i])]
      
      
      print(train_data)
      print(test_data)
      print(val_data)
      

      输出:

      [['img_1.png', 432, 662, 554, 749, 'class'], ['img_1.png', 647, 456, 754, 594, 'class'], ['img_2.png', 598, 659, 897, 302, 'class']]
      ['image_3.png', 'img_4.png']
      ['img_5.png', 'img_6.png']
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-11-14
        • 2013-05-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多