簡體   English   中英

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

[英]How to find index of item with shortest list inside?

所以我有一個這種格式的列表:

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

我想找到里面最短列表的項目索引。 即在這種情況下,它將返回[x2, y2, [6,3]]因為[6,3]是這種情況下的最短列表。

當然我可以迭代找到最短的項目,但有更好/更快的方式在python中執行此操作?

使用min ,提供一個返回子列表長度的鍵函數:

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

注意,當使用min時,仍然會隱式地進行lst上的迭代。 除了迭代之外,沒有其他方法可以檢查每個項目。

如果您確實需要索引,請執行以下操作:

index = min(range(len(lst)), key=lambda dx: len(lst[dx][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

確實,有:

min(lst, key=lambda x: len(x[-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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM