Append liste cumulative des listes python

voix
-6

Je suis en train d'étendre la liste des listes d'une manière commulative comme ceci:

# Consider the following list of lists
l_Of_l = [ [1], [2], [3], [4], [5], [6], [7]]

résultat souhaité est:

l_extended = [ [1], [1, 2], [1, 2, 3], [1, 2, 3, 4], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5, 6], [1, 2, 3, 4, 5, 6, 7]]

Donc, fondamentalement, la taille de la liste reste la même après l'extension commulatively.

Modifier:

Voici ce que je l'ai fait au départ:

l_Of_l = [ [1], [2], [3], [4], [5], [6], [7]]
lista = []
for i in l_Of_l:
    lista.extend(i)
    print(list([i for i in lista]))

Mais le résultat a été:

[1]
[1, 2]
[1, 2, 3]
[1, 2, 3, 4]
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5, 6]
[1, 2, 3, 4, 5, 6, 7]

Est-ce que quelqu'un sait comment y parvenir de manière correcte?

Créé 27/11/2018 à 15:09
source utilisateur
Dans d'autres langues...                            


4 réponses

voix
4

Utilisez accumuler de itertools:

list(itertools.accumulate(l_Of_l))                                                                                              
Out: 
[[1],
 [1, 2],
 [1, 2, 3],
 [1, 2, 3, 4],
 [1, 2, 3, 4, 5],
 [1, 2, 3, 4, 5, 6],
 [1, 2, 3, 4, 5, 6, 7]]
Créé 27/11/2018 à 15:13
source utilisateur

voix
2

Une façon de le faire sans itertools est d'utiliser Python sumfonction pour concaténer listes.

>>> L =  [ [1], [2], [3], [4], [5], [6], [7] ]
>>> L_extend = [ sum(L[0:i+1], []) for i in range(len(L)) ]
Créé 27/11/2018 à 15:23
source utilisateur

voix
1

Vous pouvez également créer une compréhension de la simple liste:

>>> from operator import itemgetter
>>> l_Of_l = [[1], [2], [3], [4], [5], [6], [7]]
>>> [list(map(itemgetter(0), l_Of_l[:i+1])) for i in range(len(l_Of_l))]
[[1], [1, 2], [1, 2, 3], [1, 2, 3, 4], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5, 6], [1, 2, 3, 4, 5, 6, 7]]
Créé 27/11/2018 à 15:18
source utilisateur

voix
1

Vous voulez une somme cumulative, juste avec des listes. itertools.accumulate peut le faire.

>>> from itertools import accumulate
>>> lst = [[1], [2], [3], [4], [5], [6], [7]]
>>> list(accumulate(lst))
[[1], [1, 2], [1, 2, 3], [1, 2, 3, 4], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5, 6], [1, 2, 3, 4, 5, 6, 7]]
Créé 27/11/2018 à 15:16
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more