2024-09-25 00:28:52 发布
网友
def lookfor(alist, number): if number in alist: return alist.index(number) else: return "no"
所以基本上我输入了成千上万的数字,我必须把它们每一个都发送到“lookfor”得到一个输出,要么是“alist”中“number”的索引,要么是“no”,如果这个数字不存在的话。 当我输入的数字不是那么多,而是输入xx,xxx,xxx,xxx的时候,它能很好地计算。 有什么建议吗?你知道吗
您的代码当前需要在整个列表中搜索对lookfor的每个调用。如果alist足够大,这可能会非常慢。你知道吗
lookfor
alist
相反,您应该创建一个字典,将每个元素映射到alist中的索引。例如,对于alist = [7,4,88],您需要:indexmap = {7:0, 4:1, 88:2}。然后您可以使用以下内容搜索词典:
alist = [7,4,88]
indexmap = {7:0, 4:1, 88:2}
def lookfor(indexmap, number): return indexmap.get(number, "no")
如果alist是常量,则可以在初始化期间创建indexmap:
indexmap
indexmap = {number: index for index,number in enumerate(alist)}
如果alist随时间变化,您可以将此词典与alist一起维护。例如,如果通常使用append添加项,则可以使用:
append
alist.append(number) if number not in indexmap: indexmap[number] = len(alist) - 1
您的代码在列表中迭代,直到找到您要查找的数字(或者直到到达末尾),如果找到了数字,则必须迭代相同的数量才能返回索引。为什么不利用.index方法的行为呢?请记住,如果该数字不在列表中,则会引发ValueError。你知道吗
.index
ValueError
def lookfor(alist, number): try: return alist.index(number) except ValueError: return "no"
后记:使用^{}模块来找到最有效的解决方案,但是一定要使用各种输入,这样才能找到最快的解决方案。你知道吗
def index_on(lst): index = {val:i for i,val in enumerate(lst)} def lookup(val): return index.get(val, 'no') return lookup search = index_on(alist) search('123-4567') # => 293 (index in alist) search('123-4500') # => 'no' (not found)
您的代码当前需要在整个列表中搜索对
lookfor
的每个调用。如果alist
足够大,这可能会非常慢。你知道吗相反,您应该创建一个字典,将每个元素映射到
alist
中的索引。例如,对于alist = [7,4,88]
,您需要:indexmap = {7:0, 4:1, 88:2}
。然后您可以使用以下内容搜索词典:如果
alist
是常量,则可以在初始化期间创建indexmap
:如果
alist
随时间变化,您可以将此词典与alist
一起维护。例如,如果通常使用append
添加项,则可以使用:您的代码在列表中迭代,直到找到您要查找的数字(或者直到到达末尾),如果找到了数字,则必须迭代相同的数量才能返回索引。为什么不利用
.index
方法的行为呢?请记住,如果该数字不在列表中,则会引发ValueError
。你知道吗后记:使用^{} 模块来找到最有效的解决方案,但是一定要使用各种输入,这样才能找到最快的解决方案。你知道吗
相关问题 更多 >
编程相关推荐