468,467 Members | 2,679 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 468,467 developers. It's quick & easy.

tuple versus list

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

[
[imgFullPath,(width, height)],
[imgFullPath,(width, height)],
[imgFullPath,(width, height)],
[imgFullPath,(width, height)],
....
]

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

Thanks.

Xah
xa*@xahlee.org
http://xahlee.org/

Oct 16 '05 #1
5 3371
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)

Oct 16 '05 #2
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:
suppose i'm going to have a data structure like this:

[
[imgFullPath,(width, height)],
[imgFullPath,(width, height)],
[imgFullPath,(width, height)],
[imgFullPath,(width, height)],
...
]

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

Thanks.

Xah
xa*@xahlee.org
http://xahlee.org/


Oct 16 '05 #3
bo****@gmail.com wrote:
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.

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

Oct 16 '05 #4
In article <ma*************************************@python.or g>,
Bryan <be****@gmail.com> wrote:
bo****@gmail.com wrote:
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.

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.


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, do**@u.washington.edu
Oct 17 '05 #5

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.

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, do**@u.washington.edu

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

Oct 18 '05 #6

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

10 posts views Thread by Carlo v. Dango | last post: by
9 posts views Thread by Yomanium Yoth Taripot II | last post: by
2 posts views Thread by Ishwar Rattan | last post: by
37 posts views Thread by Gregor Horvath | last post: by
9 posts views Thread by Odd-R. | last post: by
77 posts views Thread by Nick Maclaren | last post: by
reply views Thread by Hatem Nassrat | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.