0

我有一个 2D 列表,其中每个“行”都有一个索引、名称和路径等[(1L, "bar", "foo/bar"), (2L, "app", "some/app"),]。我试图从这个给定的 2D 列表和索引中检索一个“行”。例如,索引 1 应该返回(1L, "bar", "foo/bar")。我知道我可以遍历整个列表并比较索引,直到找到像这样的对象:

my_index = 1    
for row in my_list:
    if (row[0] == my_index)
        return row
return False

我想知道在 python 中是否有更清洁/更好的方法来执行此操作,因为我是 python 新手。我知道列表有一个索引方法,它可以从列表中返回索引,但我不确定如何将它与 2D 列表一起使用。提前致谢!哦,而且,可以假设每个对象只有一个实例(即:没有重复)

4

2 回答 2

1

看起来你最好使用字典而不是列表,所以你的数据看起来像这样:

my_dict = {1L: (1L, "bar", "foo/bar"),
           2L: (2L, "app", "some/app")}

这使您可以通过索引有效地访问每个元素:

>>> my_dict[1]
(1L, 'bar', 'foo/bar')

以下是从列表中创建字典的方法:

my_dict = {row[0]: row for row in my_list}

或者在 Python 2.6 及以下版本上:

my_dict = dict((row[0], row) for row in my_list)
于 2012-09-17T23:03:29.197 回答
0

如果您的列表是静态的(意味着您不会从中添加/删除项目),您可能需要考虑对其进行排序。

默认情况下,如果我没记错的话,元组按它们的第一个元素排序,因此你应该有一个排序列表,其中my_list[x-1] 索引为 x

my_list.sort()
row = my_list[my_index - 1]
于 2012-09-17T23:02:28.973 回答