usar una txt tablas para linea leer importar funciones eliminar datos como archivos archivo python

python - txt - ¿Cuál es la mejor manera de copiar una lista?



eliminar una linea de un archivo en python (7)

Esta pregunta ya tiene una respuesta aquí:

¿Cuál es la mejor manera de copiar una lista? Sé de las siguientes maneras, ¿cuál es mejor? ¿O hay otra manera?

lst = [''one'', 2, 3] lst1 = list(lst) lst2 = lst[:] import copy lst3 = copy.copy(lst)


A menudo uso:

lst2 = lst1 * 1

Si lst1 contiene otros contenedores (como otras listas), debe usar deepcopy desde copy lib como se muestra en Mark.

ACTUALIZACIÓN: Explicando la profundidad

>>> a = range(5) >>> b = a*1 >>> a,b ([0, 1, 2, 3, 4], [0, 1, 2, 3, 4]) >>> a[2] = 55 >>> a,b ([0, 1, 55, 3, 4], [0, 1, 2, 3, 4])

Como puede ver solo un cambio ... Lo intentaré ahora con una lista de listas

>>> >>> a = [range(i,i+3) for i in range(3)] >>> a [[0, 1, 2], [1, 2, 3], [2, 3, 4]] >>> b = a*1 >>> a,b ([[0, 1, 2], [1, 2, 3], [2, 3, 4]], [[0, 1, 2], [1, 2, 3], [2, 3, 4]])

No tan legible, déjame imprimirlo con a para:

>>> for i in (a,b): print i [[0, 1, 2], [1, 2, 3], [2, 3, 4]] [[0, 1, 2], [1, 2, 3], [2, 3, 4]] >>> a[1].append(''appended'') >>> for i in (a,b): print i [[0, 1, 2], [1, 2, 3, ''appended''], [2, 3, 4]] [[0, 1, 2], [1, 2, 3, ''appended''], [2, 3, 4]]

¿Ves eso? Se adjuntó a la b [1] también, por lo que b [1] y a [1] son ​​el mismo objeto. Ahora pruébalo con deepcopy

>>> from copy import deepcopy >>> b = deepcopy(a) >>> a[0].append(''again...'') >>> for i in (a,b): print i [[0, 1, 2, ''again...''], [1, 2, 3, ''appended''], [2, 3, 4]] [[0, 1, 2], [1, 2, 3, ''appended''], [2, 3, 4]]


En términos de rendimiento, hay una sobrecarga en la list() llamadas list() comparación con el corte. Entonces, para listas cortas, lst2 = lst1[:] es aproximadamente dos veces más rápido que lst2 = list(lst1) .

En la mayoría de los casos, esto probablemente se ve superado por el hecho de que list() es más legible, pero en loops ajustados puede ser una optimización valiosa.


Las listas cortas, [:] son ​​las mejores:

In [1]: l = range(10) In [2]: %timeit list(l) 1000000 loops, best of 3: 477 ns per loop In [3]: %timeit l[:] 1000000 loops, best of 3: 236 ns per loop In [6]: %timeit copy(l) 1000000 loops, best of 3: 1.43 us per loop

Para listas más grandes, todas son iguales:

In [7]: l = range(50000) In [8]: %timeit list(l) 1000 loops, best of 3: 261 us per loop In [9]: %timeit l[:] 1000 loops, best of 3: 261 us per loop In [10]: %timeit copy(l) 1000 loops, best of 3: 248 us per loop

Para listas muy grandes (probé 50MM), todavía son más o menos lo mismo.


Me gusta hacer:

lst2 = list(lst1)

La ventaja sobre lst1 [:] es que la misma expresión funciona para dicts:

dct2 = dict(dct1)


Si desea una copia superficial (los elementos no se copian), use:

lst2=lst1[:]

Si desea hacer una copia profunda, utilice el módulo de copia:

import copy lst2=copy.deepcopy(lst1)


También puedes hacer esto:

import copy list2 = copy.copy(list1)

Esto debería hacer lo mismo que la copia superficial de Mark Roddy.


También puedes hacer:

a = [1, 2, 3] b = list(a)