如何找到里面最短列表的项目索引?

时间:2015-03-10 21:39:29

标签: python list

所以我有一个这种格式的列表:

lst = [[x1, y1, [1,3,4]], [x2, y2, [6,3]], [x3, y3, [8,6,3,9]]]

我想找到最短列表的项目索引。 即在这种情况下,它将返回[x2, y2, [6,3]],因为在这种情况下[6,3]是最短的列表。

当然我可以迭代找到最短的项目但是在python中有更好/更快的方法吗?

4 个答案:

答案 0 :(得分:3)

使用min,提供一个返回子列表长度的关键函数:

min(lst, key=lambda item: len(item[2]))

请注意,使用lst时,min上的迭代仍会隐式发生。除了迭代之外,没有其他方法可以检查每个项目。

如果你真的需要索引,请执行:

index = min(range(len(lst)), key=lambda dx: len(lst[dx][2])

答案 1 :(得分:2)

In [33]: lst = [['x1', 'y1', [1,3,4]], ['x2', 'y2', [6,3]], ['x3', 'y3', [8,6,3,9]]]

In [34]: min(enumerate(lst), key=lambda t : min(len(s) for s in t[1] if isinstance(s,list)))[0]
Out[34]: 1

答案 2 :(得分:1)

确实,有:

min(lst, key=lambda x: len(x[-1]))

答案 3 :(得分:1)

如果内部列表始终是最后一个项目

from itertools import imap

your_min = min(imap(len, (item[-1] for item in your_list)))

或者如果你想索引:

def find_index(lst):
    min_len = 1e10
    min_idx = None
    for i, v in enumerate(your_list):
        curr_len = len(v[-1])
        if curr_len < min_len:
            min_len = curr_len
            min_idx = i
    return i