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.

Python: cómo obtener todos los subconjuntos rectangulares de una lista 2D.

Digamos que tengo una lista 2D:

001
111
111

Y quiero obtener todos los posibles subconjuntos de la lista 2D que son rectangulares y contienen el elemento de la esquina superior izquierda / el elemento en grid[0][0] (no sé cómo describirlo de otra manera).

La salida debería ser:

0

00

001

0
1

00
11

001
111

0
1
1

00
11
11

001
111
111

¿Cómo puedo obtener todos los posibles subconjuntos? No tengo la menor idea de cómo implementarlo.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para obtener todos los posibles subconjuntos de la lista en 2D que sean rectangulares y contengan el elemento de la esquina superior izquierda/el elemento en grid[0][0], podemos usar bucles anidados para iterar a través de todos los sub-rectángulos posibles que incluyen la esquina superior izquierda.

    Aquí hay una implementación en Python:

    ““python
    grid = [
    [0, 0, 1],
    [1, 1, 1],
    [1, 1, 1]
    ]

    resultados = []
    for i in range(len(grid)):
    for j in range(len(grid[0])):
    for k in range(i+1, len(grid)+1):
    for l in range(j+1, len(grid[0])+1):
    subconjunto = [fila[j:l] for fila in grid[i:k]]
    if subconjunto[0][0] == 0: # asegurar que el subconjunto contenga la esquina superior izquierda
    resultados.append(subconjunto)
    # print(subconjunto) # descomente esta línea para imprimir cada subconjunto

    imprimir todos los subconjuntos

    for subconjunto in resultados:
    print()
    for fila in subconjunto:
    print(”.join(map(str, fila)))


    Esto producirá como resultado:

    0

    00

    001

    0
    1

    00
    11

    001
    111

    0
    1
    1

    00
    11
    11

    001
    111
    111
    “`

    La implementación utiliza cuatro bucles anidados para iterar a través de todas las coordenadas posibles de la esquina superior izquierda y la esquina inferior derecha de los sub-rectángulos. Luego extrae el sub-rectángulo de la lista en 2D usando la notación de rebanada y verifica si contiene el elemento de la esquina superior izquierda. Si lo hace, lo agrega a la lista resultados. Finalmente, imprime todos los subconjuntos en un formato legible.

Comments are closed.