generate random digits with length of 5

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • sotirac

    generate random digits with length of 5

    Wondering if there is a better way to generate string of numbers with
    a length of 5 which also can have a 0 in the front of the number.


    <pre>
    random_number = random.sample([0,1,2,3,4,5,6,7 ,8,9], 5) # choose 5
    elements
    code = 'this is a string' + str(random_numb er[0]) +
    str(random_numb er[1]) + str(random_numb er[2]) + str(random_numb er[3])
    + str(random_numb er[4])
    </pre>

  • Chris Rebert

    #2
    Re: generate random digits with length of 5

    On Sun, Sep 28, 2008 at 12:59 PM, sotirac <sotirac@gmail. comwrote:
    Wondering if there is a better way to generate string of numbers with
    a length of 5 which also can have a 0 in the front of the number.
    >
    >
    <pre>
    random_number = random.sample([0,1,2,3,4,5,6,7 ,8,9], 5) # choose 5
    elements
    code = 'this is a string' + str(random_numb er[0]) +
    str(random_numb er[1]) + str(random_numb er[2]) + str(random_numb er[3])
    + str(random_numb er[4])
    code = ''.join(str(dig it) for digit in random_number)

    Regards,
    Chris
    --
    Follow the path of the Iguana...

    Comment

    • Aaron \Castironpi\ Brady

      #3
      Re: generate random digits with length of 5

      On Sep 28, 2:59 pm, sotirac <soti...@gmail. comwrote:
      Wondering if there is a better way to generate string of numbers with
      a length of 5 which also can have a 0 in the front of the number.
      >
      <pre>
       random_number = random.sample([0,1,2,3,4,5,6,7 ,8,9], 5) # choose 5
      elements
       code = 'this is a string' + str(random_numb er[0]) +
      str(random_numb er[1]) + str(random_numb er[2]) + str(random_numb er[3])
      + str(random_numb er[4])
      </pre>
      '%05i'%random.r andint(0,99999)

      Comment

      • Gary M. Josack

        #4
        Re: generate random digits with length of 5

        Chris Rebert wrote:
        On Sun, Sep 28, 2008 at 12:59 PM, sotirac <sotirac@gmail. comwrote:
        >
        >Wondering if there is a better way to generate string of numbers with
        >a length of 5 which also can have a 0 in the front of the number.
        >>
        >>
        ><pre>
        > random_number = random.sample([0,1,2,3,4,5,6,7 ,8,9], 5) # choose 5
        >elements
        > code = 'this is a string' + str(random_numb er[0]) +
        >str(random_num ber[1]) + str(random_numb er[2]) + str(random_numb er[3])
        >+ str(random_numb er[4])
        >>
        >
        code = ''.join(str(dig it) for digit in random_number)
        >
        Regards,
        Chris
        >
        >
        will random.randint( 10000,99999) work for you?

        Comment

        • Gary M. Josack

          #5
          Re: generate random digits with length of 5

          Aaron "Castironpi " Brady wrote:
          On Sep 28, 2:59 pm, sotirac <soti...@gmail. comwrote:
          >
          >Wondering if there is a better way to generate string of numbers with
          >a length of 5 which also can have a 0 in the front of the number.
          >>
          ><pre>
          > random_number = random.sample([0,1,2,3,4,5,6,7 ,8,9], 5) # choose 5
          >elements
          > code = 'this is a string' + str(random_numb er[0]) +
          >str(random_num ber[1]) + str(random_numb er[2]) + str(random_numb er[3])
          >+ str(random_numb er[4])
          ></pre>
          >>
          >
          '%05i'%random.r andint(0,99999)
          --

          >
          This produces numbers other than 5 digit numbers. making the start
          number 10000 should be fine.

          Comment

          • bearophileHUGS@lycos.com

            #6
            Re: generate random digits with length of 5

            sotirac:
            random_number = random.sample([0,1,2,3,4,5,6,7 ,8,9], 5) # choose 5 elements
            But note that's without replacement. So if you want really random
            numbers you can do this:
            >>from string import digits
            >>from random import choice
            >>"".join(choic e(digits) for d in xrange(5))
            '93898'

            If you need more speed you can invent other solutions, like (but I
            don't know if it's faster):
            >>from random import shuffle
            >>ldigits = list(digits)
            >>ldigits
            ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
            >>shuffle(ldigi ts)
            >>ldigits
            ['3', '8', '6', '4', '9', '7', '5', '2', '0', '1']
            >>"".join(ldigi ts[:5])
            '38649'

            But this may be the most efficient way:
            >>from random import randrange
            >>str(randrange (100000)).zfill (5)
            '37802'

            Bye,
            bearophile

            Comment

            • Gary M. Josack

              #7
              Re: generate random digits with length of 5

              Gary M. Josack wrote:
              Aaron "Castironpi " Brady wrote:
              >On Sep 28, 2:59 pm, sotirac <soti...@gmail. comwrote:
              >>
              >>Wondering if there is a better way to generate string of numbers with
              >>a length of 5 which also can have a 0 in the front of the number.
              >>>
              >><pre>
              >> random_number = random.sample([0,1,2,3,4,5,6,7 ,8,9], 5) # choose 5
              >>elements
              >> code = 'this is a string' + str(random_numb er[0]) +
              >>str(random_nu mber[1]) + str(random_numb er[2]) + str(random_numb er[3])
              >>+ str(random_numb er[4])
              >></pre>
              >>>
              >>
              >'%05i'%random. randint(0,99999 )
              >--
              >http://mail.python.org/mailman/listinfo/python-list
              >>
              This produces numbers other than 5 digit numbers. making the start
              number 10000 should be fine.
              --
              http://mail.python.org/mailman/listinfo/python-list
              nevermind. my brain is tired tonight. this is the best solution.

              Comment

              • Mensanator

                #8
                Re: generate random digits with length of 5

                On Sep 28, 3:11�pm, "Gary M. Josack" <g...@byoteki.c omwrote:
                Chris Rebert wrote:
                On Sun, Sep 28, 2008 at 12:59 PM, sotirac <soti...@gmail. comwrote:
                >
                Wondering if there is a better way to generate string of numbers with
                a length of 5 which also can have a 0 in the front of the number.
                >
                <pre>
                �random_numbe r = random.sample([0,1,2,3,4,5,6,7 ,8,9], 5) # choose 5
                elements
                �code = 'this is a string' + str(random_numb er[0]) +
                str(random_numb er[1]) + str(random_numb er[2]) + str(random_numb er[3])
                + str(random_numb er[4])
                >
                code = ''.join(str(dig it) for digit in random_number)
                >
                Regards,
                Chris
                >
                </pre>
                >>
                will random.randint( 10000,99999) work for you?
                It doesn't meet the OP's requirement that the number
                can start with 0. Also, the method the OP asks about
                returns a list of unique numbers, so no number can
                be duplicated. He can get 02468 but not 13345.

                Now, IF it's ok to have an arbitrary number of leading
                0s, he can do this:
                >>str(random.ra ndint(0,99999)) .zfill(5)
                '00089'
                >>str(random.ra ndint(0,99999)) .zfill(5)
                '63782'
                >>str(random.ra ndint(0,99999)) .zfill(5)
                '63613'
                >>str(random.ra ndint(0,99999)) .zfill(5)
                '22315'

                Comment

                • Aaron \Castironpi\ Brady

                  #9
                  Re: generate random digits with length of 5

                  On Sep 28, 3:44 pm, Mensanator <mensana...@aol .comwrote:
                  On Sep 28, 3:11 pm, "Gary M. Josack" <g...@byoteki.c omwrote:
                  >
                  >
                  >
                  Chris Rebert wrote:
                  On Sun, Sep 28, 2008 at 12:59 PM, sotirac <soti...@gmail. comwrote:
                  >
                  >Wondering if there is a better way to generate string of numbers with
                  >a length of 5 which also can have a 0 in the front of the number.
                  >
                  ><pre>
                  >random_numbe r = random.sample([0,1,2,3,4,5,6,7 ,8,9], 5) # choose 5
                  >elements
                  >code = 'this is a string' + str(random_numb er[0]) +
                  >str(random_num ber[1]) + str(random_numb er[2]) + str(random_numb er[3])
                  >+ str(random_numb er[4])
                  >
                  code = ''.join(str(dig it) for digit in random_number)
                  >
                  Regards,
                  Chris
                  >
                  ></pre>
                  >>
                  will random.randint( 10000,99999) work for you?
                  >
                  It doesn't meet the OP's requirement that the number
                  can start with 0. Also, the method the OP asks about
                  returns a list of unique numbers, so no number can
                  be duplicated. He can get 02468 but not 13345.
                  >
                  Now, IF it's ok to have an arbitrary number of leading
                  0s, he can do this:
                  >
                  >str(random.ran dint(0,99999)). zfill(5)
                  '00089'
                  >str(random.ran dint(0,99999)). zfill(5)
                  '63782'
                  >str(random.ran dint(0,99999)). zfill(5)
                  '63613'
                  >str(random.ran dint(0,99999)). zfill(5)
                  >
                  '22315'
                  Is a while loop until there are 5 distinct digits best otherwise?

                  while 1:
                  a= '%05i'% random.randint( 0, 99999 )
                  if len( set( a ) )== 5: break

                  Comment

                  • Tim Chase

                    #10
                    Re: generate random digits with length of 5

                    Wondering if there is a better way to generate string of numbers with
                    a length of 5 which also can have a 0 in the front of the number.
                    If you want to resample the same digit multiple times, either of these
                    two will do:
                    >>from random import choice
                    >>''.join(str(c hoice(range(10) )) for _ in range(5))
                    '06082'
                    >>from string import digits
                    >>''.join(choic e(digits) for _ in range(5))
                    '09355'


                    If you need to prevent the digits from being reused
                    >>d = list(digits)
                    >>random.shuffl e(digit)
                    >>''.join(d[:5])
                    '03195'

                    I suspect that the zfill responses don't have the property of equally
                    distributed "randomness ", as the first digit may more likely be a zero.
                    The methods here should give equal probabilities for each choice in
                    each place.

                    -tkc



                    Comment

                    • =?ISO-8859-1?Q?Michael_Str=F6der?=

                      #11
                      Re: generate random digits with length of 5

                      Gary M. Josack wrote:
                      Aaron "Castironpi " Brady wrote:
                      >On Sep 28, 2:59 pm, sotirac <soti...@gmail. comwrote:
                      >>
                      >>Wondering if there is a better way to generate string of numbers with
                      >>a length of 5 which also can have a 0 in the front of the number.
                      >>>
                      >><pre>
                      >> random_number = random.sample([0,1,2,3,4,5,6,7 ,8,9], 5) # choose 5
                      >>elements
                      >> code = 'this is a string' + str(random_numb er[0]) +
                      >>str(random_nu mber[1]) + str(random_numb er[2]) + str(random_numb er[3])
                      >>+ str(random_numb er[4])
                      >></pre>
                      >>>
                      >>
                      >'%05i'%random. randint(0,99999 )
                      >--
                      >http://mail.python.org/mailman/listinfo/python-list
                      >>
                      This produces numbers other than 5 digit numbers. making the start
                      number 10000 should be fine.
                      Why do you think it's wrong?
                      >>import random
                      >>'%05i'%random .randint(0,9999 9)
                      '09449'
                      >>>
                      IMO it's exactly what was required.

                      Ciao, Michael.

                      Comment

                      • Aaron \Castironpi\ Brady

                        #12
                        Re: generate random digits with length of 5

                        On Sep 28, 4:08 pm, Michael Ströder <mich...@stroed er.comwrote:
                        Gary M. Josack wrote:
                        Aaron "Castironpi " Brady wrote:
                        On Sep 28, 2:59 pm, sotirac <soti...@gmail. comwrote:
                        >
                        >Wondering if there is a better way to generate string of numbers with
                        >a length of 5 which also can have a 0 in the front of the number.
                        >
                        ><pre>
                        > random_number = random.sample([0,1,2,3,4,5,6,7 ,8,9], 5) # choose5
                        >elements
                        > code = 'this is a string' + str(random_numb er[0]) +
                        >str(random_num ber[1]) + str(random_numb er[2]) + str(random_numb er[3])
                        >+ str(random_numb er[4])
                        ></pre>
                        >
                        '%05i'%random.r andint(0,99999)
                        --
                        >http://mail.python.org/mailman/listinfo/python-list
                        >
                        This produces numbers other than 5 digit numbers. making the start
                        number 10000 should be fine.
                        >
                        Why do you think it's wrong?
                        >
                        >
                        >
                        >import random
                        >'%05i'%random. randint(0,99999 )
                        '09449'
                        >
                        IMO it's exactly what was required.
                        >
                        Ciao, Michael.
                        As you read, there isn't agreement on whether the OP wanted
                        replacement. His original code didn't; his spec seemed to.

                        Comment

                        • Mensanator

                          #13
                          Re: generate random digits with length of 5

                          On Sep 28, 3:54�pm, "Aaron \"Castironpi \" Brady"
                          <castiro...@gma il.comwrote:
                          On Sep 28, 3:44�pm, Mensanator <mensana...@aol .comwrote:
                          >
                          >
                          >
                          >
                          >
                          On Sep 28, 3:11 pm, "Gary M. Josack" <g...@byoteki.c omwrote:
                          >
                          Chris Rebert wrote:
                          On Sun, Sep 28, 2008 at 12:59 PM, sotirac <soti...@gmail. comwrote:
                          >
                          Wondering if there is a better way to generate string of numbers with
                          a length of 5 which also can have a 0 in the front of the number.
                          >
                          <pre>
                          random_number = random.sample([0,1,2,3,4,5,6,7 ,8,9], 5) # choose5
                          elements
                          code = 'this is a string' + str(random_numb er[0]) +
                          str(random_numb er[1]) + str(random_numb er[2]) + str(random_numb er[3])
                          + str(random_numb er[4])
                          >
                          code = ''.join(str(dig it) for digit in random_number)
                          >
                          Regards,
                          Chris
                          >
                          </pre>
                          >>
                          will random.randint( 10000,99999) work for you?
                          >
                          It doesn't meet the OP's requirement that the number
                          can start with 0. Also, the method the OP asks about
                          returns a list of unique numbers, so no number can
                          be duplicated. He can get 02468 but not 13345.
                          >
                          Now, IF it's ok to have an arbitrary number of leading
                          0s, he can do this:
                          >
                          >>str(random.ra ndint(0,99999)) .zfill(5)
                          '00089'
                          >>str(random.ra ndint(0,99999)) .zfill(5)
                          '63782'
                          >>str(random.ra ndint(0,99999)) .zfill(5)
                          '63613'
                          >>str(random.ra ndint(0,99999)) .zfill(5)
                          >
                          '22315'
                          >
                          Is a while loop until there are 5 distinct digits best otherwise?
                          Of course not.
                          >
                          while 1:
                          � a= '%05i'% random.randint( 0, 99999 )
                          � if len( set( a ) )== 5: break
                          How is this better than the OP's original code?

                          Comment

                          • Mensanator

                            #14
                            Re: generate random digits with length of 5

                            On Sep 28, 4:02�pm, Tim Chase <python.l...@ti m.thechases.com wrote:
                            Wondering if there is a better way to generate string of numbers with
                            a length of 5 which also can have a 0 in the front of the number.
                            >
                            If you want to resample the same digit multiple times, either of these
                            two will do:
                            >
                            �>>from random import choice
                            �>>''.join(st r(choice(range( 10))) for _ in range(5))
                            '06082'
                            >
                            �>>from string import digits
                            �>>''.join(ch oice(digits) for _ in range(5))
                            '09355'
                            >
                            If you need to prevent the digits from being reused
                            >
                            �>>d = list(digits)
                            �>>random.shu ffle(digit)
                            �>>''.join(d[:5])
                            '03195'
                            >
                            I suspect that the zfill responses don't have the property of equally
                            distributed "randomness ", as the first digit may more likely be a zero.
                            � The methods here should give equal probabilities for each choice in
                            each place.
                            Does he want equal probabilities of each digit in each place?
                            >
                            -tkc

                            Comment

                            • bearophileHUGS@lycos.com

                              #15
                              Re: generate random digits with length of 5

                              Tim Chase:
                              I suspect that the zfill responses don't have the property of equally
                              distributed "randomness ", as the first digit may more likely be a zero.
                              This code I have shown before:
                              str(randrange(1 00000)).zfill(5 )

                              If the numbers are equally distributed in [0, 99999], then the leading
                              zeros have the correct distribution.

                              A little test program for you:

                              from string import digits
                              from random import choice, randrange
                              from collections import defaultdict

                              def main():
                              N = 1000000

                              freqs1 = defaultdict(int )
                              for i in xrange(N):
                              n = "".join(choice( digits) for d in xrange(5))
                              freqs1[n[0]] += 1
                              print [freqs1[str(i)] for i in xrange(10)]

                              freqs2 = defaultdict(int )
                              for i in xrange(N):
                              n = str(randrange(1 00000)).zfill(5 )
                              freqs2[n[0]] += 1
                              print [freqs2[str(i)] for i in xrange(10)]

                              import psyco; psyco.full()
                              main()

                              The output:
                              [100153, 99561, 99683, 100297, 99938, 100162, 99738, 100379, 100398,
                              99691]
                              [99734, 100153, 100091, 100683, 99580, 99676, 99671, 100131, 100102,
                              100179]

                              Of course with a bit of math you can also demonstrate it :-)

                              Bye,
                              bearophile

                              Comment

                              Working...