Possible de renvoyer deux listes à partir d'une compréhension de liste?

Est-il possible de renvoyer deux listes à partir d'une compréhension de liste? Eh bien, cela ne fonctionne évidemment pas, mais quelque chose comme:

rr, tt = [i*10, i*12 for i in xrange(4)]

, Donc rr et tt les deux sont des listes avec les résultats de i*10 et i*12 respectivement. Merci beaucoup

28
demandé sur jamylak 2012-05-07 12:59:33

3 réponses

>>> rr,tt = zip(*[(i*10, i*12) for i in xrange(4)])
>>> rr
(0, 10, 20, 30)
>>> tt
(0, 12, 24, 36)
47
répondu jamylak 2012-05-07 09:01:19

Il est possible pour une compréhension de liste de renvoyer plusieurs listes si les éléments sont des listes. Ainsi, par exemple:

>>> x, y = [[] for x in range(2)]
>>> x
[]
>>> y
[]
>>>

L'astuce avec la fonction zip ferait le travail, mais est en fait beaucoup plus simple et lisible si vous collectez simplement les résultats dans des listes avec une boucle.

0
répondu Mariy 2012-05-07 09:17:40

Selon mes tests, la création de deux listes de compréhensions gagne (au moins pour les longues listes). Sachez que la réponse la mieux votée est plus lente même que les boucles For traditionnelles. les compréhensions des listes sont plus rapides et plus claires.

python -m timeit -n 100 -s 'rr=[];tt = [];' 'for i in range(500000): rr.append(i*10);tt.append(i*12)' 
10 loops, best of 3: 123 msec per loop

> python -m timeit -n 100 rr,tt = zip(*[(i*10, i*12) for i in range(500000)])' 
10 loops, best of 3: 170 msec per loop

> python -m timeit -n 100 'rr = [i*10 for i in range(500000)]; tt = [i*10 for i in range(500000)]' 
10 loops, best of 3: 68.5 msec per loop

Ce serait bien de voir des listes de compréhension supportant la création de plusieurs listes à la fois.

0
répondu toto_tico 2018-03-12 10:31:35