En Python, la única forma en 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?¿Cómo puedo obtener la concatenación de dos listas en Python sin modificar ninguna?
Respuesta
Sí: list1+list2
. Esto le da una nueva lista que es la concatenación de list1
y list2
.
siempre puede crear una nueva lista que es 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, por lo que creo que tiene sentido modificar las listas originales mediante extender o adjuntar.
Tiene sentido modificar las listas originales si ya no necesita las listas no modificadas, entonces en este caso no tendría sentido. –
Dependiendo de cómo se va a utilizar una vez que se ha creado itertools.chain
podría ser su mejor apuesta:
>>> import itertools
>>> a = [1, 2, 3]
>>> b = [4, 5, 6]
>>> c = itertools.chain(a, b)
Esto crea un generador para los elementos de la lista combinada, que tiene la ventaja de que ningún nuevo lista debe ser creado, pero todavía se puede utilizar c
como si fuera la concatenación de las dos listas:
>>> for i in c:
... print i
1
2
3
4
5
6
Si las listas son grandes y la eficiencia es una preocupación, entonces este y otros métodos de la itertools
módulo son muy útiles para saber.
Tenga en cuenta que este ejemplo utiliza los elementos en c
, por lo que tendrá que reiniciarlo antes de poder volver a utilizarlo. Por supuesto, puede usar list(c)
para crear la lista completa, pero eso creará una nueva lista en la memoria.
solo diga que itertools.chain regresa un generador ... – Ant
Sólo para hacerle saber:
Cuando se escribe list1 + list2
, a la que llama el método de __add__
list1
, que devuelve una nueva lista. de esta manera también puede tratar con myobject + list1
agregando el método __add__
a su clase personal.
Y si tiene 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)
No realmente ahorrar cualquier momento (listas intermedias todavía se crean), pero bueno si usted tiene un número variable de listas para aplanar , por ejemplo, *args
.
También puede utilizar sum
, si le dan un argumento 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 la +
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 las cadenas :
>>> 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]
En Python 3.5.2, 'sum' está documentado para decir" Esta función está diseñada específicamente para usarse con valores numéricos y puede rechazar tipos no numéricos ". Por lo tanto, no estoy seguro de que 'sum' deba ser usado así. –
Buena captura en la documenta ción. Es curioso que no solo rechazaran los valores no numéricos, en lugar de enterrar la intención en los documentos. – kevlarr
- 1. La concatenación de dos listas - diferencia entre '+ =' y extender()
- 2. Concatenación de listas en Haskell
- 3. Comparando dos listas en Python
- 4. ¿Cómo puedo comparar dos listas en python y devolver coincidencias?
- 5. Concatenación de listas en Prolog
- 6. Concatenación de dos listas de diferentes tipos con LINQ
- 7. permutaciones de dos listas en Python
- 8. ¿Cómo puedo comparar dos listas en Groovy
- 9. ¿Cómo expandir un MACRO en NSString sin usar ninguna concatenación de cadenas en tiempo de ejecución?
- 10. Combinar dos listas sin duplicados
- 11. ¿Cómo encontrar dos listas con la misma estructura en python?
- 12. Intercalación de dos listas en Python
- 13. intersecar dos listas de palabras en python
- 14. Como restar dos listas en Python
- 15. Búsqueda de Python en listas de listas
- 16. ¿Cómo comparar dos listas de dicts en Python?
- 17. ¿Cómo combino dos listas en un diccionario en Python?
- 18. En Python, ¿cómo comparar dos listas y obtener todos los índices de coincidencias?
- 19. ¿Es posible volver dos listas de una función en Python
- 20. ¿Cómo puedo iterar sobre las tuplas de los elementos de dos o más listas en Python?
- 21. Concatenación de dos matrices en Objective-C
- 22. ¿Cómo obtener la diferencia de dos archivos PDF en python?
- 23. ¿Cómo funciona la concatenación de dos literales de cadena?
- 24. combinar dos listas de manera única en Python
- 25. Cálculo de la similitud de dos listas
- 26. ¿Cómo puedo obtener socket connect() sin bloqueo?
- 27. ¿Cómo puedo pasar dos listas a una subrutina de Perl?
- 28. ¿Cómo puedo determinar de manera eficiente si dos listas contienen elementos ordenados de la misma manera?
- 29. Obtener una lista distinta entre dos listas en C#
- 30. La fusión de dos listas en Haskell
Bueno, eso lo explica. Estaba buscando un nombre de función, no un operador (Sí, sé que los operadores están implementados por funciones ocultas.) –
En realidad se puede hacer esto mediante el uso de una función no oculta: operador de importación, operator.add (list1, list2) –
@NPE ¿Qué pasa si quiero concatenar un número arbitrario de la lista? ¿Cómo puedo definir la función? Gracias. – twlkyao