输入需要很长时间

时间:2015-09-15 09:13:26

标签: python

我正在制作一个程序,输入就像:

1 5 3 2 4
1 4 5 3 2 

我的程序拆分输入并将其存储在两个列表中:

first=input().split()
second=input().split()

但重要的是需要很长时间。这是cProfile的输出,输入与我之前提到的相同。

> 30 function calls in 8.604 seconds

   Ordered by: standard name

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.000    0.000    8.604    8.604 KSPnomore.py:1(<module>)
        4    0.000    0.000    0.000    0.000 cp1252.py:18(encode)
        3    0.000    0.000    0.000    0.000 cp437.py:22(decode)
        3    0.000    0.000    0.000    0.000 {built-in method charmap_decode}
        4    0.000    0.000    0.000    0.000 {built-in method charmap_encode}
        1    0.000    0.000    8.604    8.604 {built-in method exec}
        3    8.604    2.868    8.604    2.868 {built-in method input}
        2    0.000    0.000    0.000    0.000 {built-in method print}
        3    0.000    0.000    0.000    0.000 {method 'append' of 'list' objects}
        1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}
        3    0.000    0.000    0.000    0.000 {method 'pop' of 'list' objects}
        2    0.000    0.000    0.000    0.000 {method 'split' of 'str' objects}

有人可以帮我改进输入吗?

1 个答案:

答案 0 :(得分:2)

您将大部分时间花在输入功能上:

ncalls  tottime  percall  cumtime  percall filename:lineno(function)
     3    8.604    2.868    8.604    2.868 {built-in method input}

正如评论所示,这会计算您输入数字的时间。

我用这个程序测试了它:

foo = input("42")

在按下回车键之前等待~10秒得到这个结果:

Ordered by: standard name

ncalls  tottime  percall  cumtime  percall filename:lineno(function)
     1    0.000    0.000   11.202   11.202 so_inputtime.py:1(<module>)
     1    0.000    0.000   11.202   11.202 {built-in method exec}
     1   11.202   11.202   11.202   11.202 {built-in method input}
     1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}

这里输入函数消耗约10秒的运行时间。

要获得更逼真的程序配置文件,可以使用字符串替换输入以进行性能分析。

# for profiling
first = "1 5 3 2 4".split()
second = "1 4 5 3 2".split()

# for productive use
# first = input().split()
# second = input().split()