2010-05-13 8 views
3

Dire que j'ai une liste qui ressemble à ceci:Comment puis-je récupérer des paires d'une liste en python?

['item1', 'item2', 'item3', 'item4', 'item5', 'item6', 'item7', 'item8', 'item9', 'item10'] 

En utilisant Python, comment pourrais-je saisir des paires de là, où chaque élément est inclus dans une paire avec les deux l'élément avant et après?

['item1', 'item2'] 
['item2', 'item3'] 
['item3', 'item4'] 
['item4', 'item5'] 
['item5', 'item6'] 
['item6', 'item7'] 
['item7', 'item8'] 
['item8', 'item9'] 
['item9', 'item10'] 

On dirait que quelque chose que je pourrais pirater ensemble, mais je me demande si quelqu'un a une solution élégante, ils ont utilisé avant?

+0

duplication possible de [Python: Boucler tout sauf le dernier élément d'une liste] (http://stackoverflow.com/questions/914715/python-looping-through-all-but-the-last-item-of -a-list) – tzot

Répondre

11

Un moyen rapide et simple de le faire serait quelque chose comme:

a = ['item1', 'item2', 'item3', 'item4', 'item5', 'item6', 'item7', 'item8', 'item9', 'item10'] 

print zip(a, a[1:]) 

qui produira les résultats suivants:

[('item1', 'item2'), ('item2', 'item3'), ('item3', 'item4'), ('item4', 'item5'), ('item5', 'item6'), ('item6', 'item7'), ('item7', 'item8'), ('item8', 'item9'), ('item9', 'item10')] 
+0

Encore plus compact que la compréhension de la liste. Je n'ai jamais vu de zip auparavant. – supersighs

+0

Très bien. Je n'avais pas réalisé que le zip réduirait la liste comme ça. –

1

Cela devrait faire l'affaire:

[(foo[i], foo[i+1]) for i in xrange(len(foo) - 1)] 
+0

En effet, oui, bravo! Je savais qu'il y avait quelque chose que je pouvais faire avec une compréhension de liste, mais je ne savais pas trop comment l'aborder. Merci! – supersighs

+0

cela produit des tuples pas des listes comme l'OP l'a demandé – joaquin

+0

L'OP demandait seulement des paires, mais si vous préférez une liste sur un tuple, vous changez juste '' [foo [i], foo [i + 1]] ' dans la compréhension. –

Questions connexes