2009-05-28 8 views
2

Je veux faire une correspondance de motif comme fonctionnelle pour obtenir les deux premiers éléments, puis le reste d'une valeur de retour de tableau.python - match sur la valeur de retour du tableau

Par exemple, supposons que perms (x) retourne une liste de valeurs, et je veux faire:

seq=perms(x) 
a = seq[0] 
b = seq[1] 
rest = seq[2:] 

Bien sûr, je peux réduire à:

[a,b] = seq[0:2] 
rest = seq[2:] 

Puis-je utiliser une notation pour le faire?

[a,b,more] = perms(x) 

ou conceptuel:

[a,b,more..] = perms(x) 

PROLOG & langages fonctionnels font la liste de décomposition si bien comme ça!

Répondre

2

Pour Python 2, je sais que vous pouvez le faire avec une fonction:

>>> def getValues(a, b, *more): 
    return a, b, more 

>>> seq = [1,2,3,4,5] 
>>> a, b, more = getValues(*seq) 
>>> a 
1 
>>> b 
2 
>>> more 
(3, 4, 5) 

Mais pas sûr s'il n'y a aucune façon de le faire comme Ayman's Python 3 suggestion

+2

un peu plus court: a, b, m = (lambda a, b, * plus: (a, b, plus)) (* seq) – Javier

+0

c'est le chemin pour python-2.x – van

3

En python 2, votre question est très proche à une réponse déjà:

a, b, more = (seq[0], seq[1], seq[2:]) 

ou:

(a, b), more = (seq[0:2], seq[2:]) 
0

Très bien, merci.

Les suggestions où l'on dissèque le tableau du côté combat-main ne fonctionne pas si bien pour moi, car je voulais réellement correspondre à la forme sur les retours d'une expression de générateur.

pour (a, b, plus) dans perms (suivants): ...

J'aime la solution P3, mais doivent attendre Komodo pour le soutenir!

Questions connexes