2d lists

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

    2d lists

    What is the best way to assign a 2d lists? Something like;

    for i in range(10):
    for j in range(10):
    aList[i][j] = i*j

    Thank you in advance.
  • Jeff Epler

    #2
    Re: 2d lists

    Depending on your purposes, you may be looking for numarray[1].[color=blue][color=green][color=darkred]
    >>> import numarray
    >>> anArray = numarray.fromfu nction(lambda x, y: x*y, (10,10))
    >>> anArray[/color][/color][/color]
    array([[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
    [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
    [ 0, 2, 4, 6, 8, 10, 12, 14, 16, 18],
    [ 0, 3, 6, 9, 12, 15, 18, 21, 24, 27],
    [ 0, 4, 8, 12, 16, 20, 24, 28, 32, 36],
    [ 0, 5, 10, 15, 20, 25, 30, 35, 40, 45],
    [ 0, 6, 12, 18, 24, 30, 36, 42, 48, 54],
    [ 0, 7, 14, 21, 28, 35, 42, 49, 56, 63],
    [ 0, 8, 16, 24, 32, 40, 48, 56, 64, 72],
    [ 0, 9, 18, 27, 36, 45, 54, 63, 72, 81]])

    A cheap trick is to use tuples as dict keys, which gets you a kind of
    sparse N-dimensional array:
    aDict = {}
    for i in range(10):
    for j in range(10):
    aDict[i,j] = i*j

    You can create your nested list with a nested list comprehension:
    aList = [ [ i * j for i in range(10) ] for j in range(10) ]
    if you really want lists.

    Jeff
    [1] http://www.google.com/search?q=numarray

    -----BEGIN PGP SIGNATURE-----
    Version: GnuPG v1.2.4 (GNU/Linux)

    iD8DBQFAuRScJd0 1MZaTXX0RAtbbAJ 4vKiSbqueKMx5x+ v/1LaIlt2MXQACglJ ru
    kRqHjPrwKlDt3m1 X/dzsPoE=
    =4Q5T
    -----END PGP SIGNATURE-----

    Comment

    • Shalabh Chaturvedi

      #3
      Re: 2d lists

      SunX wrote:[color=blue]
      > What is the best way to assign a 2d lists? Something like;
      >
      > for i in range(10):
      > for j in range(10):
      > aList[i][j] = i*j
      >
      > Thank you in advance.[/color]

      If you want a list of lists, you could do:

      for i in range(10):
      L = aList[i] = []
      for j in range(10):
      L[j] = i*j

      A completely different option is to use a dict for 2d data:

      d = {}

      for i in range(10):
      for j in range(10):
      d[(i,j)] = i*j

      Notice the index is a tuple.

      --
      Shalabh


      Comment

      • Shalabh Chaturvedi

        #4
        Re: 2d lists

        Shalabh Chaturvedi wrote:
        [color=blue]
        > SunX wrote:
        >[color=green]
        >> What is the best way to assign a 2d lists? Something like;
        >>
        >> for i in range(10):
        >> for j in range(10):
        >> aList[i][j] = i*j
        >>
        >> Thank you in advance.[/color]
        >
        >
        > If you want a list of lists, you could do:
        >
        > for i in range(10):
        > L = aList[i] = []
        > for j in range(10):
        > L[j] = i*j[/color]

        This is quite wrong. Here is a corrected version (this time tested :)

        aList = []
        for i in range(10):
        L = []
        aList.append(L)
        for j in range(10):
        L.append(i*j)

        --
        Shalabh


        Comment

        • Piet van Oostrum

          #5
          Re: 2d lists

          >>>>> xiaohua_sun@yah oo.com (SunX) (S) wrote:

          S> What is the best way to assign a 2d lists? Something like;
          S> for i in range(10):
          S> for j in range(10):
          S> aList[i][j] = i*j

          S> Thank you in advance.

          Use list comprehension:
          aList = [[i*j for j in range(10)] for i in range(10)]
          --
          Piet van Oostrum <piet@cs.uu.n l>
          URL: http://www.cs.uu.nl/~piet [PGP]
          Private email: P.van.Oostrum@h ccnet.nl

          Comment

          Working...