我有这样一个列表,例如:
L = [(0, "test", "value"), (0, "test2", "value2")]
并且我需要= bisect_left每个元组的第一个元素来找到列表中的索引,但是,如果不事先创建一个包含所有这些第一个元素的列表,我想不出一种方法来完成这个任务:
第一个月
任何想法的另一种方式来做这件事,因为它的工作,但当我的名单得到5000项长,这是非常缓慢的,我需要一个更快的方式来做它?
我有这样一个列表,例如:
L = [(0, "test", "value"), (0, "test2", "value2")]
并且我需要= bisect_left每个元组的第一个元素来找到列表中的索引,但是,如果不事先创建一个包含所有这些第一个元素的列表,我想不出一种方法来完成这个任务:
第一个月
任何想法的另一种方式来做这件事,因为它的工作,但当我的名单得到5000项长,这是非常缓慢的,我需要一个更快的方式来做它?
3条答案
按热度按时间6qqygrtg1#
Python有一个内置的
bisect_left
,你可以使用它,你不需要构建整个中间列表,你只需要一个lazy对象,它从元组中检索该位置的第一个元素。一些简单的事情,比如:
从Python 3.10的
bisect
开始,你可以使用use a key function for the search,所以不再需要 Package 器,在你的例子中,它是key=operator.itemgetter(0)
。ioekq8ef2#
python处理元组比较很棒...只需传递给它
(2,"asd","dsa")
甚至只是(2,)
(或者任何你试图查找的索引位置项)或者您可以传递
(0,"asd","value")
,它会知道将其放在另一个(0,"test","value")
项元组的左侧...或者(0,"zzzz","value")
,它会知道将其放在该项的右侧w46czmvw3#
来自Python 3.10
对于Python 3.10以下版本,另一种方法是使用zip函数