我已经开始解决一些欧拉计划中的问题,并用简单的暴力解决方案解决了第4个问题:
def mprods(a,b):
c = range(a,b)
f = []
for d in c:
for e in c:
f.append(d*e)
return f
max([z for z in mprods(100,1000) if str(z)==(''.join([str(z)[-i] for i in range(1,len(str(z))+1)]))])
在解决问题后,我试图尽可能地使它更加简洁,并想出了那个可怕的底线!
为了不半途而废,我正在尝试将函数压缩成列表推导式。到目前为止,我已经尝试了以下几种方法:
- [d*e for d,e in (range(a,b), range(a,b))] 显然完全走错了路。:-) - [d*e for x in [e for e in range(1,5)] for d in range(1,5)] 这给我带来了[4, 8, 12, 16, 4, 8, 12, 16, 4, 8, 12, 16, 4, 8, 12, 16],而我期望得到[1, 2, 3, 4, 2, 4, 6, 8, 3, 6, 9, 12, 4, 8, 12, 16]或类似的结果。
有没有Python专家可以帮忙? :)