2

I want to know whether there is an equivalent statement in lists to do the following. In MATLAB I would do the following

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

In short I have an initial value, a final value and an increment. I need to create an array (I read it is equivalent to lists in python) and print to a file.

4

6 回答 6

10

在 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 不同,range两者np.arange都希望它们的参数按顺序start, stop, 然后step. 还要记住,与 Matlab 语法不同,range两者np.arange都会在当前值大于或等于停止值时立即停止。

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

于 2013-08-20T02:06:10.267 回答
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())

于 2013-08-20T00:56:15.677 回答
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()

你可以执行

蟒蛇测试.py

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

1
6
11
16
21
26
31
36
41
46
于 2013-08-20T01:24:51.250 回答
0

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

用于此的 Python 语法有点尴尬,因为您需要为 range(或 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)
于 2014-12-12T15:20:03.300 回答
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)

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

于 2013-08-20T00:58:23.367 回答
-1
open('inc.txt','w').write("\n".join(str(i) for i in range(init,final,inc)))
于 2013-08-20T00:56:08.077 回答