我有两个列表,一个包含员工薪水,一个包含查询。对于每个查询,我都想打印有多少员工薪水低于该值。
您可以在下面找到我当前使用的代码,它超出了我对大量输入的时间限制。因此,我正在寻找更有效的解决方案。
sal = [int(raw_input()) for x in range(num_employees)]
q = [int(raw_input()) for x in range(num_queries)]
for i in q:
count = 0
for ep in sal:
if ep < i:
count +=1
print count
请您参考如下方法:
我不知道这是否会比您的解决方案更快(或更慢)。您可以使用 timeit模块来确定您的大量输入。
sal = [int(raw_input()) for x in range(num_employees)]
q = [int(raw_input()) for x in range(num_queries)]
for i in q:
print sum(1 for s in sal if s < i)
根据数据大小,您可以预先对薪水和查询进行排序,然后只需要遍历列表一次:
idx = 0
sal = sorted(sal)
count = 0
for q in sorted(queries):
while sal[idx] < q:
count += 1
idx += 1
print count
第二种方法对于长输入会更快,但对于较短的输入可能会更慢 - 您必须使用代表性数据进行分析。如果您的数据已经排序,则此方法将非常快。
