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

2024-10-01 09:32:26 发布

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

我正在通过一个练习学习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])访问第一个元素的标签作为示例(decoded是外部列表的名称)。这不管用。因此,我检查了样品溶液后,没有弄清楚如何访问元素干净,而不必做一些复杂的事情。 使用的示例代码

labels = [d[0][1] for d in decoded]

这就成功地列出了标签。在检查解决方案之前,我试图做一些类似的事情,但是我有点不喜欢,我通过设置d = decoded[0]尝试了这个单一版本,我得到了一个长度为1的三个元素的列表,就像前面的元素示例一样。我发现让人困惑的是d[0][1]可以给我标签,但decoded[0][1]不能。为什么


Tags: 代码图像元素示例内容列表标签事情
2条回答

如果您想访问第一个元组中第一个元素的标签aka'hotdog',您需要print(decoded[0][0][1]),其中decoded[0][0][1]中的[1]是元组中的第二个元素(0索引),右手的[0]是元组本身,左手的[0]是内部列表

一些背景:在您的示例中,实际上有一个包含其他元组列表的列表,显示为[[()],[()],[()]],其中()是元组,[]是列表。理论上,在每个内部列表中可以有多个元组,如[[(),(),()],[(),()],[()]]等。但是,访问元组中的值的方式与使用索引访问列表的方式相同,因此会产生混淆

代码[d[0][1] for d in decoded]之所以有效,是因为d实际上只是一个元组列表(尽管在本例中只有一个元组在列表中)

您需要处理元组:

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']

相关问题 更多 >