sacar - ¿Cómo puedo obtener la concatenación de dos listas en Python sin modificar ninguna de ellas?
metodos de listas en python (7)
Dependiendo de cómo lo vaya a usar una vez que lo haya creado, itertools.chain
podría ser su mejor itertools.chain
:
>>> import itertools
>>> a = [1, 2, 3]
>>> b = [4, 5, 6]
>>> c = itertools.chain(a, b)
Esto crea un generador para los elementos en la lista combinada, lo que tiene la ventaja de que no es necesario crear una nueva lista, pero aún puede usar c
como si fuera la concatenación de las dos listas:
>>> for i in c:
... print i
1
2
3
4
5
6
Si sus listas son grandes y la eficiencia es una preocupación, entonces este y otros métodos del módulo itertools
son muy útiles de conocer.
Tenga en cuenta que este ejemplo utiliza los elementos en c
, por lo que deberá reinicializarlo antes de poder reutilizarlo. Por supuesto, solo puede usar la list(c)
para crear la lista completa, pero eso creará una nueva lista en la memoria.
Esta pregunta ya tiene una respuesta aquí:
- ¿Cómo concatenar dos listas en Python? 28 respuestas
En Python, la única forma que puedo encontrar para concatenar dos listas es list.extend
, que modifica la primera lista. ¿Hay alguna función de concatenación que devuelva su resultado sin modificar sus argumentos?
Sí: list1+list2
. Esto da una nueva lista que es la concatenación de list1
y list2
.
Sólo para hacerle saber:
Cuando escribe list1 + list2
, está llamando al método __add__
de list1
, que devuelve una nueva lista. de esta manera, también puedes lidiar con myobject + list1
agregando el método __add__
a tu clase personal.
También puedes usar la sum
, si le das un argumento de start
:
>>> list1, list2, list3 = [1,2,3], [''a'',''b'',''c''], [7,8,9]
>>> all_lists = sum([list1, list2, list3], [])
>>> all_lists
[1, 2, 3, ''a'', ''b'', ''c'', 7, 8, 9]
Esto funciona en general para cualquier cosa que tenga el operador +
:
>>> sum([(1,2), (1,), ()], ())
(1, 2, 1)
>>> sum([Counter(''123''), Counter(''234''), Counter(''345'')], Counter())
Counter({''1'':1, ''2'':2, ''3'':3, ''4'':2, ''5'':1})
>>> sum([True, True, False], False)
2
Con la notable excepción de cuerdas:
>>> sum([''123'', ''345'', ''567''], '''')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: sum() can''t sum strings [use ''''.join(seq) instead]
Y si tienes más de dos listas para concatenar:
import operator
list1, list2, list3 = [1,2,3], [''a'',''b'',''c''], [7,8,9]
reduce(operator.add, [list1, list2, list3])
# or with an existing list
all_lists = [list1, list2, list3]
reduce(operator.add, all_lists)
En realidad, no le ahorra tiempo (aún se crean listas intermedias) pero está bien si tiene un número variable de listas para aplanar, por ejemplo, *args
.
siempre se puede crear una nueva lista que sea el resultado de agregar dos listas.
>>> k = [1,2,3] + [4,7,9]
>>> k
[1, 2, 3, 4, 7, 9]
Las listas son secuencias mutables, así que supongo que tiene sentido modificar las listas originales extendiendo o agregando.
concatenated_list = list_1 + list_2