How to create a range of numbers with a given increment

后端 未结 6 892
故里飘歌
故里飘歌 2021-01-15 15:26

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          


        
相关标签:
6条回答
  • 2021-01-15 15:27

    I think your looking for something like this:

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

    The [str(x) for x in nums] syntax is called a list comprehension. It allows you to build a list on the fly. '\n'.join(list) serves to take a list of strings and concatenate them together. str(x) is a type cast: it converts an integer to a string.

    Alternatively, with a simple for loop:

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

    The key is that you cast the value to a string before concatenation.

    0 讨论(0)
  • 2021-01-15 15:28

    test.py contains :

    #!/bin/env python                                                                                                                                                                                  
    
    f = open("test.txt","wb")                                                                                                                                                                           
    for i in range(1,50,5):                                                                                                                                                                             
        f.write("%d\n"%i)
    
    f.close()
    

    You can execute

    python test.py

    file test.txt would look like this :

    1
    6
    11
    16
    21
    26
    31
    36
    41
    46
    
    0 讨论(0)
  • 2021-01-15 15:38

    In Python, range(start, stop + 1, step) can be used like Matlab's start:step:stop command. Unlike Matlab's functionality, however, range only works when start, step, and stop are all integers. If you want a parallel function that works with floating-point values, try the arange command from 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))
    

    Keep in mind that, unlike Matlab, range and np.arange both expect their arguments in the order start, stop, then step. Also keep in mind that, unlike the Matlab syntax, range and np.arange both stop as soon as the current value is greater than or equal to the stop value.

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

    0 讨论(0)
  • 2021-01-15 15:39

    I think that the original poster wanted 51 to show up in the list, as well.

    The Python syntax for this is a little awkward, because you need to provide for range (or xrange or arange) an upper-limit argument that is one increment beyond your actual desired upper limit. An easy solution is the following:

    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)
    
    0 讨论(0)
  • 2021-01-15 15:49
    open('inc.txt','w').write("\n".join(str(i) for i in range(init,final,inc)))
    
    0 讨论(0)
  • 2021-01-15 15:50

    You can easily create a function for this. The first three arguments of the function will be the range parameters as integers and the last, fourth argument will be the filename, as a string:

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

    Now you have to call it, with your custom values:

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

    So your output will be (in the fname file):

    1
    6
    11
    16
    21
    26
    31
    36
    41
    46
    

    NOTE: in Python 2.x a range() returns a list, in Python 3.x a range() returns an immutable sequence iterator, and if you want to get a list you have to write list(range())

    0 讨论(0)
提交回复
热议问题