Re: Tuples vs Lists: Semantic difference
Ben Finney wrote: Bjoern Schliessmann [EMAIL PROTECTED] Explain. Well, since you ask so politely :-) I admit, sometimes I'm a little short-spoken ;) I know tuples as immutable lists ... That's a common misconception. [...] Thanks for pointers, there's more to it than I suspected. Regards, Björn -- BOFH excuse #384: it's an ID-10-T error -- http://mail.python.org/mailman/listinfo/python-list
Re: Tuples vs Lists: Semantic difference (was: Extract String From Enclosing Tuple)
George Sakkis, I agree with the things you say. Sometimes you may have a sequence of uniform data with unknown len (so its index doesn't have semantic meaning). You may want to use it as dict key, so you probably use a tuple meant as just an immutable list. I don't know Ruby, but I think it allows such purposes with a freezing function. Bye, bearophile -- http://mail.python.org/mailman/listinfo/python-list
Re: Tuples vs Lists: Semantic difference (was: Extract String From Enclosing Tuple)
On Mar 1, 5:02 am, [EMAIL PROTECTED] wrote: I don't know Ruby, but I think it allows such purposes with a freezing function. In ruby all objects can be frozen (freeze is a method on Object, from which all other objects derive), not just Arrays (Arrays == lists in python; ruby has no built-in container equiv. to tuple). But that's more of an implementation detail rather than anthing to do with the structure/semantics of a certain type of object (e.g., a String can be frozen, a Hash can be frozen, c). Regards, Jordan -- http://mail.python.org/mailman/listinfo/python-list
Re: Tuples vs Lists: Semantic difference
George Sakkis [EMAIL PROTECTED] writes: On Feb 28, 10:45 pm, Ben Finney wrote: Tuples are intended for use as heterogeneous data structures [...] Lists are intended for use as homogeneous sequences [...] Nice, that's a good summary of the straw man arguments about the true distinction between tuples and lists. I'm not sure why you say it's a straw man argument. I'm presenting *my* understanding of a position that I also share, in order to defend it; a straw man argument is a misrepresentation of *another party's* position for the purpose of appearing to attack that party's position. http://www.fallacyfiles.org/strawman.html Whose position have I misrepresented and attacked? Now can you please explain why an heterogeneous data structure: 1) does not support __setitem__, changing the value of an existing item from 3 to 4, In the case of a tuple, because the value is conceptually the entire tuple. To change one of its items would be to create a new value -- so that's what is supported. 2) supports iteration over its (heterogeneneous) elements, but not an index() method An index() method would imply that the index of an item has some meaning, such that extracting a single item is meaningful. Since a tuple represents a single conceptual structural value, to extract one item is something to be done at the same time as extracting all the others. 3) why using indices rather than names for implied semantics is a good idea anyway. You've already shown that one *doesn't* use an index for accessing items in a tuple. As for addition/removal/insertion of elements not making sense for a heterogeneous data structure, have you heard of database schema change ? A database schema change is not an operation one performs with the expectation that the tuples will remain the same. Thus, one would expect to discard the old tuples as obsolete and retrieve them from the relation again, getting new tuples. Heterogeneous data structures are well known for several decades now; they are commonly spelled records though, not tuples, and have a more reasonable API to support their semantics. Python doesn't natively support relational schema operations. It does natively support tuples. I never professed that the two were the same, and don't accept that they should be. -- \ I have never made but one prayer to God, a very short one: 'O | `\ Lord, make my enemies ridiculous!' And God granted it. -- | _o__) Voltaire | Ben Finney -- http://mail.python.org/mailman/listinfo/python-list
Tuples vs Lists: Semantic difference (was: Extract String From Enclosing Tuple)
Bjoern Schliessmann [EMAIL PROTECTED] writes: Ben Finney wrote: A tuple implies a meaning associated with each position in the sequence (like a record with a positional meaning for each field), a list implies the opposite (a sequence with order but not meaning associated with each position). Explain. Well, since you ask so politely :-) I know tuples as immutable lists ... That's a common misconception. Tuples are intended for use as heterogeneous data structures: every index in the sequence *means* something, a semantic meaning applied to the item at that index. It's for this reason that a tuple is immutable: removing items, inserting them in the middle, etc. would imply that the index doesn't have semantic meaning for the structure, which is not true. Lists are intended for use as homogeneous sequences: not that every value is of the same type, but that a particular index in the sequence doesn't *mean* anything about the semantic interpretation of the item at that position. It's for this reason that a list is mutable: since the index of an item has no semantic meaning, inserting new items or removing them from anywhere in the sequence doesn't alter the meaning of the structure. James Tauber explains further: URL:http://jtauber.com/blog/2006/04/15/python_tuples_are_not_just_constant_lists -- \ You can be a victor without having victims. -- Harriet Woods | `\ | _o__) | Ben Finney -- http://mail.python.org/mailman/listinfo/python-list
Re: Tuples vs Lists: Semantic difference (was: Extract String From Enclosing Tuple)
On Feb 28, 10:45 pm, Ben Finney [EMAIL PROTECTED] wrote: Bjoern Schliessmann [EMAIL PROTECTED] writes: I know tuples as immutable lists ... That's a common misconception. And this catch phrase, that's a common misconception, is a common aping of the BDFL's take on this. As several long threads have shown, it is a highly controversial topic and claiming that one side has misconceived it doesn't make it more true than a Catholic claiming that Protestants are misconceived about the True Christianity or vice versa. Tuples are intended for use as heterogeneous data structures: every index in the sequence *means* something, a semantic meaning applied to the item at that index. It's for this reason that a tuple is immutable: removing items, inserting them in the middle, etc. would imply that the index doesn't have semantic meaning for the structure, which is not true. Lists are intended for use as homogeneous sequences: not that every value is of the same type, but that a particular index in the sequence doesn't *mean* anything about the semantic interpretation of the item at that position. It's for this reason that a list is mutable: since the index of an item has no semantic meaning, inserting new items or removing them from anywhere in the sequence doesn't alter the meaning of the structure. James Tauber explains further: URL:http://jtauber.com/blog/2006/04/15/python_tuples_are_not_just_constan... Nice, that's a good summary of the straw man arguments about the true distinction between tuples and lists. Now can you please explain why an heterogeneous data structure: 1) does not support __setitem__, changing the value of an existing item from 3 to 4, 2) supports iteration over its (heterogeneneous) elements, but not an index() method, and 3) why using indices rather than names for implied semantics is a good idea anyway. As for addition/removal/insertion of elements not making sense for a heterogeneous data structure, have you heard of database schema change ? Heterogeneous data structures are well known for several decades now; they are commonly spelled records though, not tuples, and have a more reasonable API to support their semantics. George -- http://mail.python.org/mailman/listinfo/python-list