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.

Cómo imprimir 1000 nuevas cadenas con un elemento sustituido basado en una cadena de 1000 símbolos.

Aquí hay un poco de biología molecular.

Así que necesito generar 1000 secuencias mutantes basadas en una secuencia primaria de 1000 nucleótidos. Cada secuencia mutante siguiente debe tener un nucleótido aleatorio cambiado a uno de la misma clase (A a G y viceversa; T a C y viceversa) en comparación con la secuencia precedente. Además, se debe utilizar random.randint y random.seed(1).

Esto es lo que tengo hasta ahora:

import random

<h1>A continuación se muestra la secuencia inicial</h1>

seq = 'CGCCTGTAATCCCAGCACTCTGGGAGGCAGAGGTGGGCCGATCACTTGAGGTCAGGAGTTCGAGACCAGCCTGGGCAACATGGTGAAACACCATCTCTACTAAAAACACAAAAATTAGCCAGGTGTGGTGGCAGGCACCTGCAGTCCCAGCTACTCCGGAGGCTGAGGCAGGAGAATTGCTCGAACCTGGGAGGCAGGGGTTGCAGTGAGCCGACATGGCGCCACTGCACTCCAGTCTGGGCGACAGAGTGAGACCCTATCTCAAAAAAAAAAAAAAAAAAAAAAGACCCAACTCAAGTATCATCTCCAGGAAGCCTTCCCCTACTCCCAGCAATTAAATGCTCCTCAGAGAATTCCCATTTTTGGTTTACTCTTTGGTTTACCTCCAGACAGGAAGCCCCCACTGACACTGTTGTAGTCCCAGGGTGCAACACAAAGCAGAGATCACAAGCTGAGTTTAATAATTGCTTGTGGAATACATGTCCCAAGCCACCTCCTGCAGGAAGCCCTTCCAGATGCCCATTCTAGCCAGTCTGGCTCTTTGCTTCCATACCTTCACAACACTTGTGCCTCCCCCAGGGCCTCTTTCTCATCTTGCTTTCTGGGGCAGCTGTGTGCACATTTGTCTGTGTGCAGCAACTCTCTAAGGCAGGGATTTTTACTCCTATTTTTGATGAGGGGAGCTGTGGCTCAGAGAGGTTGAATAACCTAAGGCCACACAGTGAGTGGCAGAGCCAGGAATGTGACTTGGGTCCATTTGAATCCAAAGTCCCTGTACTTTCCACTGCCCTACCTAGATGTCCCTGTACCTCCTATAAAATCAGCATGGAGCCTGGTGCCTGGTAGTCCCTACAAATATTCACAAATTGGAGCTTAGCTCAGCTCTCAGGCAAGGCCCAGGTCAAAAGGGCAGATACAGCTTTGGGACCTTAGTTGCCACCACATGCCATACCTTCTTCCCAGCAGAAGGACTCCCTCCAAGACAGGGTAGGGGTGGAGG'
n = 0
while n <= 1000:  # configurando un ciclo para 1000 mutaciones
    i = random.randint(0, 1001)  # eligiendo un nucleótido aleatorio para cambiar
    if seq[i] == 'A':
        print(seq.replace('A', 'G', 1))  # el tercer argumento debería mostrar cuántas veces se debe cambiar un nucleótido, pero no funciona por alguna razón
    elif seq[i] == 'G':
        print(seq.replace('G', 'A', 1))
    elif seq[i] == 'C':
        print(seq.replace('C', 'T', 1))
    elif seq[i] == 'T':
        print(seq.replace('T', 'C', 1))
    n = n + 1

Los principales problemas con los que me he encontrado son hacer que el programa genere nuevas mutaciones basadas en la secuencia anterior, no en la secuencia original y solo substituir un nucleótido.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para generar 1000 secuencias mutantes basadas en una secuencia primaria de 1000 nucleótidos con un nucleótido aleatorio cambiado a uno de la misma clase (A a G y viceversa; T a C y viceversa), se puede usar el siguiente código:

    import random
    random.seed(1)
    
    seq = 'CGCCTGTAATCCCAGCACTCTGGGAGGCAGAGGTGGGCCGATCACTTGAGGTCAGGAGTTCGAGACCAGCCTGGGCAACATGGTGAAACACCATCTCTACTAAAAACACAAAAATTAGCCAGGTGTGGTGGCAGGCACCTGCAGTCCCAGCTACTCCGGAGGCTGAGGCAGGAGAATTGCTCGAACCTGGGAGGCAGGGGTTGCAGTGAGCCGACATGGCGCCACTGCACTCCAGTCTGGGCGACAGAGTGAGACCCTATCTCAAAAAAAAAAAAAAAAAAAAAAGACCCAACTCAAGTATCATCTCCAGGAAGCCTTCCCCTACTCCCAGCAATTAAATGCTCCTCAGAGAATTCCCATTTTTGGTTTACTCTTTGGTTTACCTCCAGACAGGAAGCCCCCACTGACACTGTTGTAGTCCCAGGGTGCAACACAAAGCAGAGATCACAAGCTGAGTTTAATAATTGCTTGTGGAATACATGTCCCAAGCCACCTCCTGCAGGAAGCCCTTCCAGATGCCCATTCTAGCCAGTCTGGCTCTTTGCTTCCATACCTTCACAACACTTGTGCCTCCCCCAGGGCCTCTTTCTCATCTTGCTTTCTGGGGCAGCTGTGTGCACATTTGTCTGTGTGCAGCAACTCTCTAAGGCAGGGATTTTTACTCCTATTTTTGATGAGGGGAGCTGTGGCTCAGAGAGGTTGAATAACCTAAGGCCACACAGTGAGTGGCAGAGCCAGGAATGTGACTTGGGTCCATTTGAATCCAAAGTCCCTGTACTTTCCACTGCCCTACCTAGATGTCCCTGTACCTCCTATAAAATCAGCATGGAGCCTGGTGCCTGGTAGTCCCTACAAATATTCACAAATTGGAGCTTAGCTCAGCTCTCAGGCAAGGCCCAGGTCAAAAGGGCAGATACAGCTTTGGGACCTTAGTTGCCACCACATGCCATACCTTCTTCCCAGCAGAAGGACTCCCTCCAAGACAGGGTAGGGGTGGAGG'
    
    mutants = [seq]
    
    for i in range(1, 1000):
        prev_seq = mutants[-1]
    
        # Seleccionando un nucleótido aleatorio para cambiar
        j = random.randint(0, len(seq)-1)
    
        # Seleccionando un nucleótido aleatorio de la misma clase que el que se está reemplazando
        if prev_seq[j] in ['A', 'G']:
            new_nuc = random.choice(['A', 'G'])
        elif prev_seq[j] in ['C', 'T']:
            new_nuc = random.choice(['C', 'T'])
    
        # Creando una nueva secuencia mutante con un nucleótido cambiado
        mutant_seq = prev_seq[:j] + new_nuc + prev_seq[j+1:]
    
        mutants.append(mutant_seq)
    
    print(len(mutants)) # Comprobando el número de secuencias generadas
    

    En este código, random.seed(1) establece la semilla aleatoria para asegurarse de que se generen la misma secuencia de números aleatorios cada vez que se ejecuta el programa. La lista mutants se inicializa con la secuencia original, y un bucle for se utiliza para generar 1000 secuencias mutantes.

    En cada iteración del bucle, la variable prev_seq se establece como la secuencia mutante más reciente generada (inicialmente la secuencia original seq). Se selecciona un nucleótido aleatorio en prev_seq usando random.randint, y se selecciona un nuevo nucleótido de la misma clase usando random.choice. Finalmente, se crea la nueva secuencia mutante reemplazando un nucleótido en prev_seq con el nucleótido recién seleccionado.

    Cada nueva secuencia mutante se agrega a la lista mutants usando .append(). La lista resultante mutants contendrá 1000 secuencias, cada una con un nucleótido aleatorio cambiado a uno de la misma clase en comparación con la secuencia precedente.

Comments are closed.