Есть ли способ выполнить эту функцию рекурсивно? - PullRequest
0 голосов
/ 20 апреля 2019

Я все еще относительно новичок в Python.Есть ли способ, которым я могу выполнить эту функцию рекурсивно?Я ищу совпадающие пары и исключаю несовпадающие пары с '+'.

integ = 3    #number of sequences
evenList = ['GAAGCTCG', 'AAATTT', 'CTCTAGGAC']
oddList = ['CCTCGGGA', 'GGGCCC', 'GAGTACCTG']

def matchList(evenList, oddList, integ):

        indexElement = 0
        indexList = 0
        totalIndexSeq = []
        at_List = ['AT', 'TA', 'at', 'ta']
        gc_List = ['GC', 'CG', 'gc', 'cg']
        for x in evenList:
            indexedSeq = ''
            for y in x:
                if y + oddList[indexList][indexElement] in gc_List:
                    indexedSeq += str(indexElement)
                    indexElement += 1
                elif y + oddList[indexList][indexElement] in gc_List:
                    indexedSeq += str(indexElement)
                    indexElement += 1
                elif y + oddList[indexList][indexElement] in at_List:
                    indexedSeq += str(indexElement)
                    indexElement += 1
                elif y + oddList[indexList][indexElement] in at_List:
                    indexedSeq += str(indexElement)
                    indexElement += 1
                else:
                    indexedSeq += "+"
                    indexElement += 1
            indexList += 1
            indexElement -= indexElement
            totalIndexSeq.append(indexedSeq)
        return (totalIndexSeq)
        #This returns the positions with mismatched pairs omitted by a "+"
# When you print 'totalIndexSeq'
#['0+234+6+']
#['0+234+6+', '++++++']
#['0+234+6+', '++++++', '012++5678']

Ответы [ 2 ]

0 голосов
/ 20 апреля 2019

Это можно сделать еще проще (речь идет о генетическом кодировании ДНК?):

evenList = ['GAAGCTCG', 'AAATTT', 'CTCTAGGAC']
oddList = ['CCTCGGGA', 'GGGCCC', 'GAGTACCTG']

def matchList(evenList, oddList):

        totalIndexSeq = []
        match_list = [('A','T'), ('T','A') ,('G','C'), ('C','G')]
        pairedList=zip(evenList.upper(),oddList.upper()) # tuples from evenList and oddList elements
        for p in pairedList:
            pairs=zip(list(p[0]),list(p[1])) # tuples of even and odd list characters
            indexSeq=[ str(i) if p in match_list else '+' for i,p in enumerate(pairs)]
            totalIndexSeq.append(''.join(indexSeq)) #convert to string and add to list
        return totalIndexSeq

у вас нет ограничений на длину списка (на самом деле вы не использовали integ в вашем коде также).Теперь вы должны сказать мне, какую часть вы хотите быть рекурсивной?Обычно я рекомендую не использовать рекурсию из-за высокого использования ресурсов.

0 голосов
/ 20 апреля 2019

Это не вписывается в комментарий, поэтому здесь замечание (не ответ).Код довольно избыточен, что затрудняет идентификацию.Это эквивалентно:

integ = 3    #number of sequences
evenList = ['GAAGCTCG', 'AAATTT', 'CTCTAGGAC']
oddList = ['CCTCGGGA', 'GGGCCC', 'GAGTACCTG']

def matchList(evenList, oddList, integ):

        indexElement = 0
        indexList = 0
        totalIndexSeq = []
        at_List = ['AT', 'TA', 'at', 'ta']
        gc_List = ['GC', 'CG', 'gc', 'cg']

        for x in evenList:
            indexedSeq = ''

            for y in x:
                if y + oddList[indexList][indexElement] in gc_List + at_List:
                    indexedSeq += str(indexElement)                    
                else:
                    indexedSeq += "+"
                indexElement += 1

            indexList += 1
            indexElement -= indexElement
            totalIndexSeq.append(indexedSeq)

        return totalIndexSeq
        #This returns the positions with mismatched pairs omitted by a "+"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...