es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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

Tags:  , ,

Answer

  1. Avatar for 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:

    A_filtered = filter(lambda i: C[i] == 'B', range(N))
    result = [A[i] for i in A_filtered]
    

    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 de A.

    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 para A 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 lista A 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.

Comments are closed.