Python中的优化问题

Python中的优化问题,python,python-3.x,optimization,Python,Python 3.x,Optimization,任务: 从用户处获取名为n的整数。获取用户输入的n次姓名电话号码然后再次获取姓名。如果您第二次输入的姓名在列表中,请打印相关的name=电话号码。未找到Else打印 输入示例: n = int(input()) d = {} for x in range(n): key_value = input().split() d[key_value[0]]= key_value[1] lofnames = [] for name in range(n): name =

任务:
从用户处获取名为n的整数。获取用户输入的n姓名电话号码然后再次获取姓名。如果您第二次输入的姓名在列表中,请打印相关的name=电话号码。未找到Else打印

输入示例:

n = int(input())

d = {}
for x in range(n):
    key_value = input().split()
    d[key_value[0]]= key_value[1]
    
lofnames = []
for name in range(n):
    name = input()
    lofnames.append(name)

for name in lofnames:
    flag = False
    for key in d:
        if key == name:
            print(f"{key}={d[key]}")
            flag = True
    if flag == False:
        print("Not found")

示例输出:

n = int(input())

d = {}
for x in range(n):
    key_value = input().split()
    d[key_value[0]]= key_value[1]
    
lofnames = []
for name in range(n):
    name = input()
    lofnames.append(name)

for name in lofnames:
    flag = False
    for key in d:
        if key == name:
            print(f"{key}={d[key]}")
            flag = True
    if flag == False:
        print("Not found")

问题是我写了一个工作代码。但是如果传递给
n
一个太大的值,代码将花费太多时间来求解它。这是一个挑战性的问题,所以我工作的网站不接受我的代码,并希望我优化代码。我尝试了几种不同的方法来优化它,但是没有一种方法能够解决这个问题

我的代码:

n = int(input())

d = {}
for x in range(n):
    key_value = input().split()
    d[key_value[0]]= key_value[1]
    
lofnames = []
for name in range(n):
    name = input()
    lofnames.append(name)

for name in lofnames:
    flag = False
    for key in d:
        if key == name:
            print(f"{key}={d[key]}")
            flag = True
    if flag == False:
        print("Not found")

您的函数的运行时复杂性似乎是
O(N^2)
,而不是站点可能希望的
O(N)
,因为您有嵌套的
for
循环。通过不遍历字典,而是将其属性用作
O(1)
查找时间的哈希表,可以降低这种复杂性。考虑使用< <代码>尝试,除了<代码> >除<代码> > <代码> >中的键>代码> >名称>代码>。您的函数的运行时复杂度是<代码> o(n ^ 2)< />代码>而不是<代码> o(n)< /代码>,因为站点可能希望它是,因为嵌套的<>代码> 循环。通过不遍历字典,而是将其属性用作
O(1)
查找时间的哈希表,可以降低这种复杂性。考虑使用< <代码>尝试,除了块之外的代码> KeyError > <代码> >,在字典中查找您所要查找的密钥<代码>名称>代码> .p/> 您手动遍历字典的键,对要检查的每个名称执行O(n)操作。您只需使用中的
操作符检查O(1)操作中是否存在名称:

lofnames中名称的
:
如果名称在d中:
打印(f“{key}={d[key]}”)
其他:
打印(“未找到”)

您正在手动迭代字典的键,对要检查的每个名称执行O(n)操作。您只需使用
中的
操作符检查O(1)操作中是否存在名称:

lofnames中名称的
:
如果名称在d中:
打印(f“{key}={d[key]}”)
其他:
打印(“未找到”)

如果n是一个非常大的数字,并且您正在超时,也许您可以找到一种方法来减少代码中的循环数,或者减少在这些循环中执行的操作。谷歌搜索优化python的速度,我知道有很多有用的页面,我已经找到了:bI试图在flag=True下添加break,但没有成功=(.如果n是一个非常大的数字,并且您正在超时,也许您可以找到一种方法来减少代码中的循环数,或者减少在这些循环中执行的操作。通过Google around优化python的速度,我知道有一些有用的页面,我已经找到了它们:bI尝试在标志=True下添加break,但没有成功=)谢谢你帮了很多忙!