Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

transformation de liste en liste de tuples

16 réponses
Avatar
Franssoa
Bonjour,

Problème certainement trivial, mais je sèche un peu. Comment passer
simplement de :
a = [1,2,3,4,5,6,7,8]
à :
a = [(1,2),(3,4),(5,6),(7,8)]
ou :
a = [[1,2],[3,4],[5,6],[7,8]]

Merci de vos lumières
Franssoa

6 réponses

1 2
Avatar
Maric Michaud
On May 29, 1:06 pm, Franck Pommereau
wrote:
a = [1,2,3,4,5,6,7,8]
it = iter(a)
zip(it, it)
Dans le même genre : comment transformer [0, 1, 2, 3, 4] en [(0, 1), (1,




2), (2, 3), (3, 4)] ?



a = [0,1,2,3,4]
for X in zip(a, a[1:]):
print X



Vaudrait mieux que a ne soit pas trop gros...






Avatar
Maric Michaud
On May 29, 1:06 pm, Franck Pommereau
wrote:
a = [1,2,3,4,5,6,7,8]
it = iter(a)
zip(it, it)
Dans le même genre : comment transformer [0, 1, 2, 3, 4] en [(0, 1), (1,




2), (2, 3), (3, 4)] ?



a = [0,1,2,3,4]
for X in zip(a, a[1:]):
print X



Vaudrait mieux que a ne soit pas trop gros...


On peut faire ça à la place, mais je suis convaincu que c'est moins
évident qu'un parcours de la liste tout simple (cf ma solution).

In [110]: import itertools as it

In [111]: a = [0,1,2,3,4,5,6]

In [112]: [ e for e in it.izip(a, it.islice(a, 1, None)) ]
Out[112]: [(0, 1), (1, 2), (2, 3), (3, 4), (4, 5), (5, 6)]







Avatar
Gerard Flanagan
On May 29, 4:42 pm, Maric Michaud wrote:

On May 29, 1:06 pm, Franck Pommereau
wrote:
a = [1,2,3,4,5,6,7,8]
it = iter(a)
zip(it, it)
Dans le même genre : comment transformer [0, 1, 2, 3, 4] en [(0, 1), (1,




2), (2, 3), (3, 4)] ?


a = [0,1,2,3,4]
for X in zip(a, a[1:]):
print X


Vaudrait mieux que a ne soit pas trop gros...


Mais a n'est pas du tout gros...

Pour un iterable quelconque, itertools docs a:

def pairwise(iterable):
"s -> (s0,s1), (s1,s2), (s2, s3), ..."
a, b = tee(iterable)
try:
b.next()
except StopIteration:
pass
return izip(a, b)







Avatar
Maric Michaud
On May 29, 4:42 pm, Maric Michaud wrote:

On May 29, 1:06 pm, Franck Pommereau
wrote:
a = [1,2,3,4,5,6,7,8]
it = iter(a)
zip(it, it)
Dans le même genre : comment transformer [0, 1, 2, 3, 4] en [(0, 1), (1,




2), (2, 3), (3, 4)] ?
a = [0,1,2,3,4]

for X in zip(a, a[1:]):
print X
Vaudrait mieux que a ne soit pas trop gros...



Mais a n'est pas du tout gros...

Pour un iterable quelconque, itertools docs a:

def pairwise(iterable):
"s -> (s0,s1), (s1,s2), (s2, s3), ..."
a, b = tee(iterable)
try:
b.next()
except StopIteration:
pass
return izip(a, b)





Ce qui revient exactement à (à part peut-être au niveau perfs mais il ya
aura pas grand chose de toutes façons) :

it.izip(a, it.islice(a, 1, None))

D'ailleurs la liste est produite par :

zip(a, it.islice(a, 1, None))

Donc ça se vaut largement...








Avatar
Franck Pommereau
In [81]: [ (i, i+1) for i in xrange(5) ]
Out[81]: [(0, 1), (1, 2), (2, 3), (3, 4), (4, 5)]


Ça c'est de la triche : ça ne vaut que parce qu'on prend un range() en
entrée.

In [91]: import string

In [92]: l = string.letters[:5]

In [93]: [ (l[i], l[i+1]) for i in xrange(len(l)-1) ]
Out[93]: [('a', 'b'), ('b', 'c'), ('c', 'd'), ('d', 'e')]


Mais que n'y ais-je pensé plus tôt !

Avatar
Franck Pommereau
a = [0,1,2,3,4]
for X in zip(a, a[1:]):
print X
Vaudrait mieux que a ne soit pas trop gros...



Oui mais c'est chouette quand même.

Merci pour ces réponse.


1 2