Je souhaite ajouter une série de listes à une liste unique qui est en quelque sorte la liste "principale" d'un programme que j'essaie d'écrire. Y at-il un moyen de faire cela dans une ligne de code plutôt que comme 10? Je suis débutant alors je n'ai aucune idée ...
Pour une meilleure image de ma question, si j'avais ces listes:
x = [1, 2, 3]
y = [4, 5, 6]
z = [7, 8, 9]
Et voulez ajouter y et z à x. Au lieu de faire:
x.append(y)
x.append(z)
Y a-t-il un moyen de faire cela dans une ligne de code? J'ai déjà essayé:
x.append(y, z)
Et ça ne marchera pas.
x.extend(y+z)
devrait faire ce que tu veux
ou
x += y+z
ou même
x = x+y+z
Prolonger mon commentaire
In [1]: x = [1, 2, 3]
In [2]: y = [4, 5, 6]
In [3]: z = [7, 8, 9]
In [4]: from itertools import chain
In [5]: print list(chain(x,y,z))
[1, 2, 3, 4, 5, 6, 7, 8, 9]
Vous pouvez utiliser la fonction sum
avec la valeur de départ (liste vide) indiquée:
a = sum([x, y, z], [])
Ceci est particulièrement approprié si vous souhaitez ajouter un nombre arbitraire de listes.
équivalent à la réponse ci-dessus, mais suffisamment différent pour mériter une mention:
my_map = {
'foo': ['a', 1, 2],
'bar': ['b', '2', 'c'],
'baz': ['d', 'e', 'f'],
}
list(itertools.chain(*my_map.values()))
['d', 'e', 'f', 'a', 1, 2, 'b', '2', 'c']
dans l'expression ci-dessus, * est important pour obtenir un résultat en tant que chaîne, c'est la même chose que la chaîne précédente (x, y, z). Notez également que le résultat est commandé par hachage.
Si vous préférez une approche légèrement plus fonctionnelle, vous pouvez essayer:
import functools as f
x = [1, 2, 3]
y = [4, 5, 6]
z = [7, 8, 9]
x = f.reduce(lambda x, y: x+y, [y, z], x)
Cela vous permettra de concaténer un nombre illimité de listes dans la liste x
.
Si vous souhaitez simplement concaténer un nombre quelconque de listes (c.-à-d. Pas sur une liste de base), vous pouvez simplifier pour:
import functools as f
from operator import add
big_list = f.reduce(add, list_of_lists)
Veuillez noter que notre BFDL a des réserves concernant lambdas, réduire et amis: https://www.artima.com/weblogs/viewpost.jsp?thread=98196
Pour compléter cette réponse, vous pouvez en savoir plus sur reduction dans la documentation: https://docs.python.org/3/library/functools.html#functools.reduce
Je cite: "Appliquer la fonction de deux arguments de manière cumulative aux éléments de la séquence, de gauche à droite, afin de réduire la séquence à une valeur unique."
P.S. Utiliser sum()
comme décrit dans https://stackoverflow.com/a/41752487/532513 est très compact, il semble fonctionner avec des listes et est très rapide (voir https://stackoverflow.com/ a/33277438/532513 ) mais help(sum)
dans Python 3.6 dit ce qui suit:
Cette fonction est spécialement conçue pour être utilisée avec des valeurs numériques et peut rejeter les types non numériques.
Bien que cela soit légèrement inquiétant, je le garderai probablement comme première option pour concaténer des listes.
En une ligne, cela peut être fait de la manière suivante
x.extend(y+z)
ou
x=x+y+z