我正在通过练习学习有关Kaggle的深度学习的知识,这让我感到困惑。为了编写用于检查某物是否为热狗的代码,有一个预测列表,每个元素是不同图像的最可能预测。因此,总体列表为:
[
[('n07697537', 'hotdog', 0.8770528)],
[('n07697537', 'hotdog', 0.9659182)],
[('n07579787', 'plate', 0.7972369)],
[('n07583066', 'guacamole', 0.9996675)]
]
其中一个元素是:
[('n07697537', 'hotdog', 0.9659182)]
因此,为了检查图像是否最有可能是热狗,我必须获得第二个字段标签。但是我尝试访问嵌套列表中的字段时遇到了一些语法问题。
因此,我尝试使用print(decoded[0][1])
访问第一个元素的标签作为示例(解码为外部列表的名称)。这没用。因此,在无法弄清楚如何干净地访问元素而不必做复杂的事情之后,我检查了示例解决方案。
使用的示例代码
labels = [d[0][1] for d in decoded]
然后成功列出了标签列表。在检查解决方案之前,我尝试执行类似的操作,但略有偏离,我通过设置d = decoded[0]
来尝试了此版本的单数形式,并获得了包含三个元素的长度为1的列表,就像之前的元素示例一样。我感到困惑的是,d[0][1]
可以给我加上标签,而decoded[0][1]
却不能。为什么?
答案 0 :(得分:0)
您需要处理元组:
decoded = [[('n07697537', 'hotdog', 0.8770528)], [('n07697537', 'hotdog', 0.9659182)], [('n07579787', 'plate', 0.7972369)], [('n07583066', 'guacamole', 0.9996675)]]
d = [x for y in decoded for x in y]
labels = [d[0][1] for d in decoded]
此脚本给出:
['hotdog', 'hotdog', 'plate', 'guacamole']
答案 1 :(得分:0)
如果您想访问第一个元组中第一个元素的标签,也称为“热狗”,则需要print(decoded[0][0][1])
,其中[1]
中的decoded[0][0][1]
是元组中的第二个元素(索引为0),右手[0]
是元组本身,左手[0]
是内部列表。
某些背景:您的示例中实际上有一个包含其他元组列表的列表,显示为[[()],[()],[()]]
,其中()
是一个元组,[]
是一个列表。从理论上讲,您可以在每个内部列表中有多个元组,例如[[(),(),()],[(),()],[()]]
等。但是,您可以像使用列表一样使用索引来访问元组中的值,因此会产生混淆。
代码[d[0][1] for d in decoded]
之所以有效,是因为d
实际上只是一个元组列表(尽管在这种情况下,列表中只有一个元组)。