如何在嵌套列表中循环,将第一个元素与另一个列表进行比较,然后追加到新列表中?

2024-05-17 04:35:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图为CNN创建三个单独的列表(培训、测试和验证)
我有三个列表(train_数据、test_数据、val_数据),它们只包含图像名称

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列表具有相同图像的多个列表,但具有不同的边界框编号。 我想这可能很简单,但我想不出来


Tags: 数据模型test图像image名称列表img
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']

这就是你问题的答案

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)

我想这可能会帮助你:

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)

相关问题 更多 >