有没有更好的方法来获取Python中的数字列表

时间:2016-05-10 12:33:33

标签: python

有没有更好的方法来获取数字列表,例如:

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')

4 个答案:

答案 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