Tuples from List

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • rshepard@nospam.appl-ecosys.com

    Tuples from List

    While it should be easy for me to get what I need from a list, it's
    proving to be more difficult than I expected.

    I start with this list:

    [ 6.24249034e-01+0.j 5.11335982e-01+0.j 3.67333773e-01+0.j
    3.01189122e-01+0.j 2.43449050e-01+0.j 1.82948476e-01+0.j
    1.43655139e-01+0.j 9.91225725e-02+0.j]

    and I want a list of floats of only the first 6 digits for each value. If I
    write:
    for i in listname:
    print i

    I get this:

    (0.624249034424 +0j)
    (0.511335982206 +0j)
    (0.367333773283 +0j)
    (0.301189121704 +0j)
    (0.243449050439 +0j)
    (0.182948475822 +0j)
    (0.14365513894+ 0j)
    (0.099122572534 4+0j)

    I know it's embarrassingly simple, but the correct syntax eludes my
    inexperienced mind. What I want is a list [0.62424, 0.51133, ...] so that I
    can normalize those values.

    What is the correct syntax, please?

    Rich
  • Paul Rubin

    #2
    Re: Tuples from List

    rshepard@nospam .appl-ecosys.com writes:
    [ 6.24249034e-01+0.j 5.11335982e-01+0.j 3.67333773e-01+0.j
    3.01189122e-01+0.j 2.43449050e-01+0.j 1.82948476e-01+0.j
    1.43655139e-01+0.j 9.91225725e-02+0.j]
    >
    and I want a list of floats of only the first 6 digits for each value. If I
    write:
    for i in listname:
    print i
    If you mean the first six digits of the real part and they're all < 1,

    for z in listname:
    print '%.5f' % z.real

    Comment

    • Robert Kern

      #3
      Re: Tuples from List

      rshepard@nospam .appl-ecosys.com wrote:
      While it should be easy for me to get what I need from a list, it's
      proving to be more difficult than I expected.
      >
      I start with this list:
      >
      [ 6.24249034e-01+0.j 5.11335982e-01+0.j 3.67333773e-01+0.j
      3.01189122e-01+0.j 2.43449050e-01+0.j 1.82948476e-01+0.j
      1.43655139e-01+0.j 9.91225725e-02+0.j]
      No, that's a numpy array.
      and I want a list of floats of only the first 6 digits for each value. If I
      write:
      for i in listname:
      print i
      >
      I get this:
      >
      (0.624249034424 +0j)
      (0.511335982206 +0j)
      (0.367333773283 +0j)
      (0.301189121704 +0j)
      (0.243449050439 +0j)
      (0.182948475822 +0j)
      (0.14365513894+ 0j)
      (0.099122572534 4+0j)
      Those aren't tuples, but complex numbers.
      I know it's embarrassingly simple, but the correct syntax eludes my
      inexperienced mind. What I want is a list [0.62424, 0.51133, ...] so that I
      can normalize those values.
      >
      What is the correct syntax, please?
      # Extract the real components (since the imaginary components are all 0):
      eigvals = eigvals.real

      # Normalize the eigenvalues:
      eigvals /= eigvals.sum()

      --
      Robert Kern

      "I have come to believe that the whole world is an enigma, a harmless enigma
      that is made terrible by our own mad attempt to interpret it as though it had
      an underlying truth."
      -- Umberto Eco

      Comment

      • Ben Finney

        #4
        Re: Tuples from List

        rshepard@nospam .appl-ecosys.com writes:
        While it should be easy for me to get what I need from a list, it's
        proving to be more difficult than I expected.
        >
        I start with this list:
        >
        [ 6.24249034e-01+0.j 5.11335982e-01+0.j 3.67333773e-01+0.j
        3.01189122e-01+0.j 2.43449050e-01+0.j 1.82948476e-01+0.j
        1.43655139e-01+0.j 9.91225725e-02+0.j]
        That's not correct syntax for a list. I assume, then, that it's not
        actual code from your program.
        and I want a list of floats of only the first 6 digits for each value.
        You don't get to choose how many digits are represented in a float
        value; that's a property of the underlying floating-point
        implementation, and indeed will change depending on the actual value
        (since a float is a *binary* representation of a number, not decimal).

        Perhaps you are looking for the Decimal type:

        <URL:http://docs.python.org/lib/module-decimal.html>
        for i in listname:
        print i
        >
        I get this:
        [each item printed separately]
        >
        I know it's embarrassingly simple, but the correct syntax eludes
        my inexperienced mind. What I want is a list [0.62424, 0.51133, ...]
        so that I can normalize those values.
        You can create a new list from any sequence value by using the
        constructor for the list type:
        >>old_sequenc e = [12, 34, 56]
        >>new_list = list(old_sequen ce)
        >>new_list[0]
        12

        As for making a list containing different values (e.g. Decimal
        values), you might want a list comprehension:
        >>from decimal import Decimal
        >>old_sequenc e = [12, 34, 56]
        >>new_list = [Decimal(value) for value in old_sequence]
        >>new_list[0]
        Decimal("12")

        --
        \ "I may disagree with what you say, but I will defend to the |
        `\ death your right to mis-attribute this quote to Voltaire." -- |
        _o__) Avram Grumer, rec.arts.sf.wri tten, May 2000 |
        Ben Finney

        Comment

        • rshepard@nospam.appl-ecosys.com

          #5
          Re: Tuples from List

          On 2007-02-28, Robert Kern <robert.kern@gm ail.comwrote:
          No, that's a numpy array.
          Robert,

          That's where I went off. I forgot that I'm still dealing with a 1D NumPy
          array and not a list. No wonder I had such fits!
          Those aren't tuples, but complex numbers.
          I have not seen the 'j' suffix before. That was throwing me.
          # Extract the real components (since the imaginary components are all 0):
          eigvals = eigvals.real
          That's so much easier than what I ended up doing, which was creating
          another variable and assigning to that an explicit cast to real of the
          array.
          # Normalize the eigenvalues:
          eigvals /= eigvals.sum()
          Now that's really nice!

          Thank you very much for today's lessons. I really appreciate them

          Rich

          Comment

          Working...