tuple versus list

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

    #1

    tuple versus list

    suppose i'm going to have a data structure like this:

    [
    [imgFullPath,(wi dth, height)],
    [imgFullPath,(wi dth, height)],
    [imgFullPath,(wi dth, height)],
    [imgFullPath,(wi dth, height)],
    ....
    ]

    should i use (width,height) or [width,height]?
    what advantage i get to use n-tuple instead of the generic list?

    Thanks.

    Xah
    xah@xahlee.org
    ∑ http://xahlee.org/

  • SPE - Stani's Python Editor

    #2
    Re: tuple versus list

    It's simple: if you want to modify the data structure after it has been
    created, use lists, otherwise tuples.

    Tuples are much more memory efficient, so your program will consume
    less memory and probably run faster. So preferably use tuples. However
    with tuples you can't do:
    t[0] = 'new value'
    t.append('new value')
    These statements are possible with lists.

    Stani
    --
    SPE - Stani's Python Editor (http://pythonide.stani.be)

    Comment

    • bonono@gmail.com

      #3
      Re: tuple versus list

      In this particular case, it seems that (width,height) looks nicer. But
      I think otherwise, list constuct is easier to read, even though it is
      supposed to be slower.

      With list you can :
      [a] + [ x for x in something ]

      With tuple it looks like this :
      (a,) + tuple(x for x in something)

      I think the list looks cleaner. And since you cannot concat tuple with
      list, I think unless it looks obvious and natural(as in your case), use
      list.

      Xah Lee wrote:[color=blue]
      > suppose i'm going to have a data structure like this:
      >
      > [
      > [imgFullPath,(wi dth, height)],
      > [imgFullPath,(wi dth, height)],
      > [imgFullPath,(wi dth, height)],
      > [imgFullPath,(wi dth, height)],
      > ...
      > ]
      >
      > should i use (width,height) or [width,height]?
      > what advantage i get to use n-tuple instead of the generic list?
      >
      > Thanks.
      >
      > Xah
      > xah@xahlee.org
      > ∑ http://xahlee.org/[/color]

      Comment

      • Bryan

        #4
        Re: tuple versus list

        bonono@gmail.co m wrote:[color=blue]
        > In this particular case, it seems that (width,height) looks nicer. But
        > I think otherwise, list constuct is easier to read, even though it is
        > supposed to be slower.
        >
        > With list you can :
        > [a] + [ x for x in something ]
        >
        > With tuple it looks like this :
        > (a,) + tuple(x for x in something)
        >
        > I think the list looks cleaner. And since you cannot concat tuple with
        > list, I think unless it looks obvious and natural(as in your case), use
        > list.
        >[/color]


        i always use the structure analogy. if you view (width, height) as a structure,
        use a tuple. if you view it a sequence, use a list. in this example, i view it
        as a stucture, so i would use (width, height) as a tuple.

        bryan

        Comment

        • Donn Cave

          #5
          Re: tuple versus list

          In article <mailman.2141.1 129493153.509.p ython-list@python.org >,
          Bryan <belred@gmail.c om> wrote:
          [color=blue]
          > bonono@gmail.co m wrote:[color=green]
          > > In this particular case, it seems that (width,height) looks nicer. But
          > > I think otherwise, list constuct is easier to read, even though it is
          > > supposed to be slower.
          > >
          > > With list you can :
          > > [a] + [ x for x in something ]
          > >
          > > With tuple it looks like this :
          > > (a,) + tuple(x for x in something)
          > >
          > > I think the list looks cleaner. And since you cannot concat tuple with
          > > list, I think unless it looks obvious and natural(as in your case), use
          > > list.
          > >[/color]
          >
          >
          > i always use the structure analogy. if you view (width, height) as a
          > structure,
          > use a tuple. if you view it a sequence, use a list. in this example, i view
          > it
          > as a stucture, so i would use (width, height) as a tuple.[/color]

          Right, but there's an unfortunate ambiguity in the term "sequence",
          since in Python it is defined to include tuple. I gather you meant
          more in the abstract sense of a data collection whose interesting
          properties are of a sequential nature, as opposed to the way we are
          typically more interested in positional access to a tuple. Maybe
          a more computer literate reader will have a better word for this,
          that doesn't collide with Python terminology. My semi-formal
          operational definition is "a is similar to a[x:y], where
          x is not 0 or y is not -1, and `similar' means `could be a legal
          value in the same context.'"

          Donn Cave, donn@u.washingt on.edu

          Comment

          • Bryan

            #6
            Re: tuple versus list

            [color=blue][color=green]
            >>
            >>i always use the structure analogy. if you view (width, height) as a
            >>structure,
            >>use a tuple. if you view it a sequence, use a list. in this example, i view
            >>it
            >>as a stucture, so i would use (width, height) as a tuple.[/color]
            >
            >
            > Right, but there's an unfortunate ambiguity in the term "sequence",
            > since in Python it is defined to include tuple. I gather you meant
            > more in the abstract sense of a data collection whose interesting
            > properties are of a sequential nature, as opposed to the way we are
            > typically more interested in positional access to a tuple. Maybe
            > a more computer literate reader will have a better word for this,
            > that doesn't collide with Python terminology. My semi-formal
            > operational definition is "a is similar to a[x:y], where
            > x is not 0 or y is not -1, and `similar' means `could be a legal
            > value in the same context.'"
            >
            > Donn Cave, donn@u.washingt on.edu[/color]


            yes, you are correct. i shouldn't have used the word "sequence" which is a
            python term. maybe structure vs. array. in any case, i think the *wrong*
            answer that is often given to this question is along the lines of if it's read
            only, make it a tuple. if it's read write, make it a list. a great trivial
            example is a point. a point is a structure (x, y). if you have many points
            then you have a list of structures: [(x, y), (x1, y1), (x2, y2), ...]. to me,
            it doesn't matter if you want to modify a point. if you do then create a new
            one, but don't make it a list just to make it modifiable.

            bryan

            Comment

            Working...