La forma más rápida de iterar selectivamente (basándose en una lógica determinada) a través de dos listas grandes en Python.
Estoy filtrando la lista A basándome en ciertas condiciones en los elementos de índices correspondientes en la lista C (en realidad, C es una cadena). Como se muestra en el siguiente código, esto es lo que he intentado:
[A[j] for j in range(N) if C[j] == ‘B’]
El código anterior funciona pero no cumple con el criterio de tiempo límite. ¿Cuál sería la forma más rápida de hacer esto especialmente para listas grandes?
Tengo ambos enfoques a continuación, pero ninguno cumple con el requisito de tiempo límite.
A = [A[j] for j in range(N) if C[j] == ‘B’]
A = [a for (a, c) in zip(A, C) if c == ‘W’]
Edit:
He agregado una función como se solicitó:
def shift(A, m):
A = [A[(i – 1) % N] for i in range(N)]
maxb = max([a for (a, c) in zip(A, C) if c == ‘B’])
minw = min([a for (a, c) in zip(A, C) if c == ‘W’])
if maxb – minw > m:
m = maxb – minw
return A, m
davy.ai
Para mejorar el rendimiento del código en listas grandes, podrías usar la función
filter()
en lugar de una comprensión de lista.Aquí tienes un ejemplo:
Este código crea un objeto de filtro basado en los índices de
C
donde el valor es'B'
, y luego itera sobre esos índices para recuperar los elementos correspondientes deA
.El uso de la función
filter()
en lugar de una comprensión de lista puede mejorar el rendimiento porque evita crear una nueva lista paraA
que solo contenga los elementos filtrados. En cambio, solo lleva un registro de los índices que cumplen la condición, lo que puede ser más rápido en general.También podrías intentar usar la biblioteca
numpy
si tu listaA
contiene datos numéricos.numpy
tiene muchas funciones incorporadas para filtrar datos según condiciones u otros criterios, lo que puede ser mucho más rápido que usar un bucle o una comprensión de lista.Finalmente, podrías considerar optimizar otras partes de tu código, como la función
shift()
, para mejorar el rendimiento general. Por ejemplo, podrías intentar reducir el número de comprensiones de lista o agregar almacenamiento en caché para evitar cálculos redundantes.