任务:在2D列表中打印所有非空子矩形,时间限制为1秒。
我在python中尝试过。但是,我无法提高效率。执行花费了超过一秒钟的时间。
import time
start_time = time.time()
a = [[1,2,3],[4,5,6],[7,8,9]]
x = 3
y = 3
for i in range(x):
a.append(list(map(int,input().split())))
total = []
for h in range(1,x+1):
for k in range(1,y+1):
temp = []
for p in range(x):
for d in range(y):
for i in range(p,h):
for j in range(d,k):
temp.append(a[i][j])
if len(temp)==0:
pass
else:
total.append(temp)
temp = []
print(total)
print("--- %s seconds ---" % (time.time() - start_time))
代码执行不应超过一秒钟。还有其他方法可以减少循环以减少执行时间吗?
答案 0 :(得分:0)
您正在请求用户输入,并且正在计时收集该输入。因此,时间是没有意义的……用户可以花费任意时间输入数据。你为什么要计时呢?您需要让用户在1秒内输入3个数字吗?
此外,从不使用输入的数据。它被附加到数组“ a”上,但是在计算中仅使用该数组中的前三个条目(在添加输入之前就存在)。因此,您最好将这两行代码从代码中收集用户输入。如果这样做,您将得到:
import time
start_time = time.time()
a = [[1,2,3],[4,5,6],[7,8,9]]
x = 3
y = 3
total = []
for h in range(1,x+1):
for k in range(1,y+1):
temp = []
for p in range(x):
for d in range(y):
for i in range(p,h):
for j in range(d,k):
temp.append(a[i][j])
if len(temp)==0:
pass
else:
total.append(temp)
temp = []
print(total)
print("--- %s seconds ---" % (time.time() - start_time))
运行此命令的结果是:
[[1], [1, 2], [2], [1, 2, 3], [2, 3], [3], [1, 4], [4], [1, 2, 4, 5], [2, 5], [4, 5], [5], [1, 2, 3, 4, 5, 6], [2, 3, 5, 6], [3, 6], [4, 5, 6], [5, 6], [6], [1, 4, 7], [4, 7], [7], [1, 2, 4, 5, 7, 8], [2, 5, 8], [4, 5, 7, 8], [5, 8], [7, 8], [8], [1, 2, 3, 4, 5, 6, 7, 8, 9], [2, 3, 5, 6, 8, 9], [3, 6, 9], [4, 5, 6, 7, 8, 9], [5, 6, 8, 9], [6, 9], [7, 8, 9], [8, 9], [9]]
--- 0.00019288063049316406 seconds ---
大约是毫秒的1/5
也许您的计算机比我的计算机慢?要花1秒钟才能运行,它必须慢5000倍以上。
如果即使您不执行任何操作也要从用户那里获取输入,请在用户输入数据后对开始时间进行采样。