Elément en double dans la liste python J'ai un list en Python: l = ['a', 'c', 'e', 'b'] Je veux dupliquer chaque élément immédiatement à côté de l'original. ll = ['a', 'a', 'c', 'c', 'e', 'e', 'b', 'b'] L'ordre des éléments doit être préservée. source d'informationauteur tesla1060 listlist-comprehensionpython 16 >>> l = ['a', 'c', 'e', 'b'] >>> [x for pair in zip(l,l) for x in pair] ['a', 'a', 'c', 'c', 'e', 'e', 'b', 'b'] Ou >>> from itertools import repeat >>> [x for item in l for x in repeat(item, 2)] ['a', 'a', 'c', 'c', 'e', 'e', 'b', 'b'] 8 C'est vieux, mais je ne vois pas le simple option ici (OMI): [ item for item in l for repetitions in range(2) ] Donc, pour le cas spécifique: >>> l = ['a', 'c', 'e', 'b'] l = ['a', 'c', 'e', 'b'] >>> [ i for i in l for r in range(2) ] [ i for i in l for r in range(2) ] ['a', 'a', 'c', 'c', 'e', 'e', 'b', 'b'] >>> Et généralisation: [ item for item in l for _ in range(r) ] Où r est la quantité de répétitions que vous le souhaitez. Donc, cela a un O(n.r) l'espace et le temps de la complexité, est courte, sans dépendances et aussi idiomatiques. 4 import itertools ll = list(itertools.chain.from_iterable((e, e) for e in l)) Au travail: >>> import itertools >>> l = ['a', 'c', 'e', 'b'] >>> ll = list(itertools.chain.from_iterable((e, e) for e in l)) >>> ll ['a', 'a', 'c', 'c', 'e', 'e', 'b', 'b'] Comme Lattyware a souligné, dans le cas où vous souhaitez plus que juste le double de l'élément: from itertools import chain, repeat ll = list(chain.from_iterable(repeat(e, 2) for e in l)) 2 Essayer cette for i in l: ll.append(i) ll.append(i) Démo Il va juste faire votre travail, mais il n'est pas optimisé façon de le faire. utilisation du sna. posté par @Steven Rumbalski 1 Voici une manière assez facile: sum(zip(l, l), tuple()) Il reprend chaque élément, et les ajoute à un n-uplet. Si vous ne voulez pas un n-uplet (comme je pense), vous pouvez appeler list sur le tuple: list(sum(zip(l, l), tuple())) Quelques autres versions (qui donnent des listes): list(sum(zip(l, l), ())) sum([list(i) for i in zip(l, l)], []) sum(map(list, zip(l, l)), []) Vous devez vous connecter pour publier un commentaire.
Ou
C'est vieux, mais je ne vois pas le simple option ici (OMI):
Donc, pour le cas spécifique:
Et généralisation:
Où r est la quantité de répétitions que vous le souhaitez.
Donc, cela a un O(n.r) l'espace et le temps de la complexité, est courte, sans dépendances et aussi idiomatiques.
Au travail:
Comme Lattyware a souligné, dans le cas où vous souhaitez plus que juste le double de l'élément:
Essayer cette
Démo
Il va juste faire votre travail, mais il n'est pas optimisé façon de le faire.
utilisation du sna. posté par @Steven Rumbalski
Voici une manière assez facile:
Il reprend chaque élément, et les ajoute à un n-uplet. Si vous ne voulez pas un n-uplet (comme je pense), vous pouvez appeler
list
sur le tuple:Quelques autres versions (qui donnent des listes):