我想知道列表中是否有等效语句来执行以下操作。在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中的列表)并打印到文件。
答案 0 :(得分:5)
在Python中,range(start, stop + 1, step)
可以像Matlab的start:step:stop
命令一样使用。但是,与Matlab的功能不同,range
仅在start
,step
和stop
都是整数时才有效。如果您想要一个适用于浮点值的并行函数,请尝试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不同,range
和np.arange
都会按照start
,stop
,然后step
的顺序预期参数。另请注意,与Matlab语法不同,只要当前值大于或等于停止值,range
和np.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)))