如何使用给定的增量创建一系列数字

时间:2013-08-20 00:52:24

标签: python file list matlab

我想知道列表中是否有等效语句来执行以下操作。在MATLAB中我会做以下

fid = fopen('inc.txt','w')
init =1;inc = 5; final=51;
a = init:inc:final
l = length(a)
for i = 1:l
   fprintf(fid,'%d\n',a(i));
end
fclose(fid);

简而言之,我有一个初始值,一个最终值和一个增量。我需要创建一个数组(我读它相当于python中的列表)并打印到文件。

6 个答案:

答案 0 :(得分:5)

在Python中,range(start, stop + 1, step)可以像Matlab的start:step:stop命令一样使用。但是,与Matlab的功能不同,range仅在startstepstop都是整数时才有效。如果您想要一个适用于浮点值的并行函数,请尝试arange中的numpy命令:

import numpy as np

with open('numbers.txt', 'w') as handle:
    for n in np.arange(1, 5, 0.1):
        handle.write('{}\n'.format(n))

请注意,与Matlab不同,rangenp.arange都会按照startstop,然后step的顺序预期参数。另请注意,与Matlab语法不同,只要当前值大于或等于停止值,rangenp.arange就会停止。

http://docs.scipy.org/doc/numpy/reference/generated/numpy.arange.html

答案 1 :(得分:3)

您可以轻松地为此创建一个功能。函数的前三个参数将是范围参数作为整数,最后一个,第四个参数将是文件名,作为字符串:

def range_to_file(init, final, inc, fname):
    with open(fname, 'w') as f:
        f.write('\n'.join(str(i) for i in range(init, final, inc)))

现在您必须使用自定义值调用它:

range_to_file(1, 51, 5, 'inc.txt')

所以你的输出将是(在fname文件中):

1
6
11
16
21
26
31
36
41
46
  

注意:在Python 2.xa range() 中返回一个列表,在Python 3.xa中 range() 返回一个不可变的序列迭代器,如果你想得到一个列表,你必须写 list(range())

答案 2 :(得分:1)

test.py包含:

#!/bin/env python                                                                                                                                                                                  

f = open("test.txt","wb")                                                                                                                                                                           
for i in range(1,50,5):                                                                                                                                                                             
    f.write("%d\n"%i)

f.close()

您可以执行

python test.py

文件test.txt看起来像这样:

1
6
11
16
21
26
31
36
41
46

答案 3 :(得分:0)

我认为您正在寻找类似的东西:

nums = range(10) #or any list, i.e. [0, 1, 2, 3...]
number_string = ''.join([str(x) for x in nums])

[str(x) for x in nums]语法称为列表推导。它允许您动态构建列表。 '\n'.join(list)用于获取字符串列表并将它们连接在一起。 str(x)是类型转换:它将整数转换为字符串。

或者,使用简单的for循环:

number_string = ''
for num in nums:
    number_string += str(num)

关键是在连接之前将值转换为字符串。

答案 4 :(得分:0)

我认为原始海报也希望51出现在列表中。

这方面的Python语法有点尴尬,因为你需要为范围(或xrange或arange)提供一个超出实际所需上限的一个增量的上限参数。一个简单的解决方案如下:

init = 1
final = 51
inc = 5
with open('inc.txt','w') as myfile:
    for nn in xrange(init, final+inc, inc):
        myfile.write('%d\n'%nn)

答案 5 :(得分:-1)

open('inc.txt','w').write("\n".join(str(i) for i in range(init,final,inc)))