OVH Cloud OVH Cloud

incomprehension list comprehension

7 réponses
Avatar
Eric Deveaud
bonjour,

soit le pb suivant
2 listes L1 et L2 que je veux "merger", ie je veux récuperer une liste
ordonnée des éléments de l1 et l2 aux mêmes rangs.
ex
L1 = [1, 2, 3, 4, 5]
L2 = ['a', 'b', 'c', 'd', 'e']

voulu => [1, 'a', 2, 'b', 3, 'c', 4, 'd', 4, 5, 'e']

hors voila t-y pas que la BDFL des liste comprehension dit que

- The form [x, y for ...] is disallowed; one is required to write
[(x, y) for ...]

ce qui me permet d'écrire
res = [(v1, v2) for v1, v2 in zip(L1, L2)]
ce que je simplifie en
res = [couple for couple in zip(L1, L2)]

on s'approche de ce que je veux mais ça a la couleur de ce que je souhaite,
mais ce n'est pas ce que je souhaite, je récupère une liste de tuple

j'avoue ne pas arriver a "unpacker" mes tuples.

un ch'tit coup de main svp.

Eric

--
Computers are like air conditionners : they stop working properly when
you open Windows

7 réponses

Avatar
Nicolas Pouillon

L1 = [1, 2, 3, 4, 5]
L2 = ['a', 'b', 'c', 'd', 'e']

voulu => [1, 'a', 2, 'b', 3, 'c', 4, 'd', 4, 5, 'e']

j'avoue ne pas arriver a "unpacker" mes tuples.


Je ne sais pas si c'est le plus efficace, mais pour réaliser cette
opération je le fais avec des tuples:
reduce(tuple.__add__, zip(l1, l2), ())
(1, 'a', 2, 'b', 3, 'c')




Sinon il y a map() sur une list vide:
a = []
map(a.extend, zip(l1, l2))
[None, None, None]



a
[1, 'a', 2, 'b', 3, 'c']








j'avais pris:
l1 = [ 1, 2, 3 ]
l2 = [ 'a', 'b', 'c' ]






Avatar
Eric Deveaud
Nicolas Pouillon wrote:

L1 = [1, 2, 3, 4, 5]
L2 = ['a', 'b', 'c', 'd', 'e']

voulu => [1, 'a', 2, 'b', 3, 'c', 4, 'd', 4, 5, 'e']

j'avoue ne pas arriver a "unpacker" mes tuples.


Je ne sais pas si c'est le plus efficace, mais pour réaliser cette
opération je le fais avec des tuples:
reduce(tuple.__add__, zip(l1, l2), ())
(1, 'a', 2, 'b', 3, 'c')





merci

mékjsuiskon j'aovoue ne pas y avoir pensé

Sinon il y a map() sur une list vide:
a = []
map(a.extend, zip(l1, l2))
[None, None, None]



a
[1, 'a', 2, 'b', 3, 'c']









mékjsuiskon bis ;-(


merci

Eric
--
Je veux acheter un boomerang neuf. Comment puis-je me
debarrasser du vieux?




Avatar
Pierre Quentel
Autre solution possible :

[ x[i] for i in range(len(L1)) for x in (L1,L2) ]
[1, 'a', 2, 'b', 3, 'c', 4, 'd', 5, 'e']




Pierre



Avatar
Eric Deveaud
Pierre Quentel wrote:
Autre solution possible :

[ x[i] for i in range(len(L1)) for x in (L1,L2) ]
[1, 'a', 2, 'b', 3, 'c', 4, 'd', 5, 'e']






merci merci merci....
c'est exactement ce que je cherchais a faire.
j'ai eu un peu de mal a la comprendre, mais j'aime bien


Meric

--
Et puis c'est vrai qu'Internet sans Microsoft, Hotmail, MSN, Outlook et
Explorer, c'est un peu comme une pomme sans ver, ce ne serait pas
naturel.
-+- MT in Guide du Macounet pervers : Bill a croqué la pomme -+-




Avatar
Méta-MCI
Salut !

Et ça :

y=[]
[y.extend(x) for x in zip(L1,L2)]
print y

@+

MCI
Avatar
Eric Deveaud
Méta-MCI wrote:
Salut !

Et ça :

y=[]
[y.extend(x) for x in zip(L1,L2)]
print y



je comprends mieux en effet ;-)

Eric qui est décidément trop crevé pour avoir les idées claires


--
Ce personnage doit probablement avoir des qualités cachées (bien
cachées) pour ne pas avoir été rejeté par ces paires. Ou bien
ça s'apelle l'esprit de corps.
-+- FrF in : GNU - Il a les couilles chevillées au corps -+-

Avatar
Cémoi


L1 = [1, 2, 3, 4, 5]
L2 = ['a', 'b', 'c', 'd', 'e']

voulu => [1, 'a', 2, 'b', 3, 'c', 4, 'd', 4, 5, 'e']



j'avoue ne pas arriver a "unpacker" mes tuples.



Je ne sais pas si c'est le plus efficace, mais pour réaliser cette
opération je le fais avec des tuples:

reduce(tuple.__add__, zip(l1, l2), ())




(1, 'a', 2, 'b', 3, 'c')

Sinon il y a map() sur une list vide:

a = []
map(a.extend, zip(l1, l2))





comme ceci, ça me parait mieux fonctionner:

a = []
map (lambda i,j: a.extend ((i, j)), L1, L2)




[None, None, None]

a




[1, 'a', 2, 'b', 3, 'c']


j'avais pris:

l1 = [ 1, 2, 3 ]
l2 = [ 'a', 'b', 'c' ]