[Python-Dev] Unordered tuples/lists

Gustavo Narea me at gustavonarea.net
Wed May 19 00:13:42 CEST 2010


Hello, everybody.

I've been searching for a data structure like a tuple/list *but* unordered -- 
like a set, but duplicated elements shouldn't be removed. I have not even 
found a recipe, so I'd like to write an implementation and contribute it to 
the "collections" module in the standard library.

This is the situation I have: I have a data structure that represents an 
arithmetic/boolean operation. Operations can be commutative, which means that 
the order of their operands don't change the result of the operation. This is, 
the following operations are equivalent:
    operation(a, b, c) == operation(c, b, a) == operation(b, a, c)
    operation(a, b, a) == operation(a, a, b) == operation(b, a, a)
    operation(a, a) == operation(a, a)

So, I need a type to store the arguments/operands so that if two of these 
collections have the same elements with the same multiplicity, they are 
equivalent, regardless of the order.

A multiset is not exactly what I need: I still need to use the elements in the 
order they were given. For example, the logical conjuction (aka "and" 
operator) has a left and right operands; I need to evaluate the first/left one 
and, if it returned True, then call the second/right one. They must not be 
evaluated in a random order.

To sum up, it would behave like a tuple or a list, except when it's compared 
with another object: They would be equivalent if they're both unordered 
tuples/lists, and have the same elements. There can be mutable and immutable 
editions (UnorderedList and UnorderedTuple, respectively).

I will write a PEP to elaborate on this if you think it'd be nice to have. Or, 
should I have written the PEP first?

Cheers,
-- 
Gustavo Narea <xri://=Gustavo>.
| Tech blog: =Gustavo/(+blog)/tech  ~  About me: =Gustavo/about |


More information about the Python-Dev mailing list