代码之家  ›  专栏  ›  技术社区  ›  Ollu_

列表中列表第一项上的对分_left,Python 3

  •  3
  • Ollu_  · 技术社区  · 8 年前

    我有一个这样的列表,例如:

    L = [(0, "test", "value"), (0, "test2", "value2")]
    

    我需要=bisect_left每个元组的第一项以在列表中找到索引。然而,我想不出一种方法来做到这一点,而不在手上创建所有这些第一项的列表:

    exampleList = [L[i][0] for i in range(len(L))]

    有没有其他方法来实现这一点的想法,但当我的列表达到5000项时,它非常慢,我需要一种更快的方法来实现?

    2 回复  |  直到 8 年前
        1
  •  5
  •   wim    4 年前

    Python有一个内置的 bisect_left ,您可以使用它。您不需要构建整个中间列表,只需要一个惰性对象,从元组中检索该位置的第一项。

    像这样简单的事情:

    class Proxy(object):
        def __getitem__(self, item):
            return L[item][0]
    

    从Python 3.10开始 bisect 你可以 use a key function for the search ,因此不再需要包装器。在你的情况下,它将是 key=operator.itemgetter(0) .

        2
  •  3
  •   Joran Beasley    8 年前
    import bisect
    L = [(0, "test", "value"), (1, "test2", "value2"),(3,"test3","value3")]
    print (bisect.bisect_left(L,(2,)))
    

    python处理元组比较,很好…只需传递它 (2,"asd","dsa") 甚至只是 (2,) (或者无论您要查找的索引位置项是什么)

    或者你可以通过它 (0,"asd","value") 它会知道把它放在另一个的左边 (0,"test","value") 项目元组…或 (0,"zzzz","value") 它会知道把它放在那个项目的右边