在Python中,使用给定id返回(副本)二维列表行的最有效(最快)方法是什么?

在Python中,使用给定id返回(副本)二维列表行的最有效(最快)方法是什么?,python,Python,在Python中,使用给定id返回(副本)二维列表行的最有效(最快)方法是什么?每行的第一个元素是一个ID(字符串)。我的函数需要在二维列表中搜索具有匹配ID的行,并返回该行的副本。如果没有匹配项,则应返回None。如果只执行一次,则最好遍历列表并检查第一个元素 如果可以预处理该表,我建议先将其转换为字典: d={row[0]:lst中的行对行} 然后搜索: d.get(id) 缓慢的列表迭代(如果您不能使用dict,如您在“注释”部分中指定的): 如果您真的想在不改变型号的情况下进行此操作,则

在Python中,使用给定id返回(副本)二维列表行的最有效(最快)方法是什么?每行的第一个元素是一个ID(字符串)。我的函数需要在二维列表中搜索具有匹配ID的行,并返回该行的副本。如果没有匹配项,则应返回None。

如果只执行一次,则最好遍历列表并检查第一个元素

如果可以预处理该表,我建议先将其转换为字典:

d={row[0]:lst中的行对行}

然后搜索:

d.get(id)

缓慢的列表迭代(如果您不能使用dict,如您在“注释”部分中指定的):


如果您真的想在不改变型号的情况下进行此操作,则需要进行
O(n)
搜索,但如果您真的想优化描述中提到的速度,我强烈质疑是否选择此选项:

import copy


def find_element(data, id):
    for entry in data:
        if entry[0] == id:
            return copy.copy(entry)
    return None    

听起来你应该使用字典而不是嵌套列表。好的,但要求我使用一个列表,正如@flakes所说的,
dict
;使用
.get()
函数,如果找不到键,该函数将返回
None
。今天我学到了可以在
for
循环中放置
else
。尼特非常感谢你。我想我会用字典的方式。表演对我来说也很重要。回答得好@没问题!你应该投票给巴雷尔的答案,并奖励他们更多的详细答案!刚刚意识到,在最近的速度优化中,优化的解决方案与未优化的解决方案的速度完全相同,而且更简单。已删除较难的dict创建。列表具有
.copy()
。我省略了它,因为我不确定他是否真的需要副本:耸耸肩:@Bharel是的,只是一个偏好。适用于更可能的iterable类型,如元组。副本在描述中,所以我添加了它。
import copy


def find_element(data, id):
    for entry in data:
        if entry[0] == id:
            return copy.copy(entry)
    return None