有没有更好的方法来获取数字列表,例如:
with open('number.txt','w+') as f:
for i in range(10):
for j in range(10):
for l in range(10):
for m in range(10):
f.write('189'+str(i)+str(j)+str(l)+str(m)+'8888\n')
答案 0 :(得分:2)
for i in range(1890000, 1899999+1):
f.write('{}8888\n'.format(i))
编辑2:已更新,感谢@Selcuk指出错误。
答案 1 :(得分:2)
您可以使用基本string formatting:
for i in range(10**4):
f.write('189{:04d}8888\n'.format(i))
{:04d}
占位符会将数字填充为带有前导零的四位数。
答案 2 :(得分:1)
您可以使用itertools
获得更通用的解决方案:
import itertools
for item in itertools.product(range(10), repeat=4):
f.write('189{0}{1}{2}{3}8888\n'.format(*item))
答案 3 :(得分:0)
有一些更新,所以这里有一组新的计时运行。在更改之后,它们似乎大致相同,而itertools选项有点慢。
import itertools
def option_range1():
f = open('output1.txt', 'w+')
for i in range(1890000, 1899999+1):
f.write('{}8888\n'.format(i))
f.close()
def option_iter():
f = open('output2.txt', 'w')
for item in itertools.product(range(10), repeat=4):
f.write('189{0}{1}{2}{3}8888\n'.format(*item))
f.close()
def option_range2():
with open('output3.txt','w+') as f:
for i in range(10**4):
f.write('189{:04d}8888\n'.format(i))
%timeit -n 1000 option_range1()
1000 loops, best of 3: 13.3 ms per loop
%timeit -n 1000 option_range2()
1000 loops, best of 3: 15.6 ms per loop
%timeit -n 1000 option_iter()
1000 loops, best of 3: 18 ms per loop