2012-02-20 9 views

Respuesta

4

Si todo lo que le interesa es el orden de los elementos en la lista más externa (que es lo que todos excepto la palabra "profundo" me sugieren — solo me trae dudas sobre lo que quiere decir), y usted sepa que no habrá duplicados, puede usar un set.

>>> larry = [(1,'a'), (2, 'b')] 
>>> moe = [(2, 'b'), (1, 'a')] 
>>> set(larry) == set(moe) 
True 

Si el caso es tan simple como estas dos tuplas, también se puede utilizar un dict, lo que sería {1: 'a', 2: 'b'}. Esta puede ser o no una estructura más conveniente para usted. La comparación de dict(larry) == dict(moe) hará lo que quieras, de todos modos.

Si le importan los duplicados, tomará un poco más de trabajo, tomar copias de las listas y extraer elementos uno por uno hasta que falle o que uno esté vacío.

+0

No habrá ninguna posibilidad de duplicados. – canadadry

+0

Entonces, ¿creo que esto es lo que quieres? –

6

Si lo entiendo, sus tuplas representan conjuntos, y sus listas representan conjuntos. Lo obvio que hacer es convertirlos a conjuntos:

def setterific(l): 
    return frozenset(frozenset(p) for p in l) 

setterific(larry) == setterific(moe) 

Este utiliza frozensets, porque uno no puede tener conjuntos de conjuntos de pitón (porque los conjuntos son mutables); ver How can I create a Set of Sets in Python?.

Si solo tiene un nivel de conjuntos, vaya con frozenset(larry) == frozenset(moe).

+0

Las tuplas no representan conjuntos. Se ordenan encabezados SMTP. – canadadry

+0

@BonAmi: Su pregunta es ambigua, por lo que otras respuestas se han enfocado en el mismo escenario que yo. – Marcin

Cuestiones relacionadas