有关访问嵌套列表中的索引的问题

时间:2019-06-19 23:59:38

标签: python list

我正在通过练习学习有关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]却不能。为什么?

2 个答案:

答案 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实际上只是一个元组列表(尽管在这种情况下,列表中只有一个元组)。