Вложенный цикл for: List - не получается желаемый результат

Что я хочу сделать, так это оценить оценку каждого пептида, то есть строки

Мой код выглядит следующим образом:

import csv, math

def train_data(fname):
        #load csv training files
        peptide= []
        allele= []
        score = []
        with open (fname) as train:
                reader = csv.DictReader(train, delimiter='\t')
                for row in reader:
                        peptide.append(row['peptide'])
                        allele.append(row['allele'])
                        score.append(row['score'])

        return [peptide, allele, score]

def ff():
        peptide, allele, score = train_data('sample.txt')
        p={'A':(0.074+0.077)/2, 'R':(0.052+0.053)/2, 'N':(0.045+0.044)/2, 'D':(0.054+0.051)/2, 'C':(0.025+0.022)/2, 'Q':(0.034+0.035)/2, 'E':(0.054+0.056)/2, 'G':(0.074+0.074)/2, 'H':(0.026+0.025)/2, 'I':(0.068+0.064)/2, 'L':(0.099+0.096)/2, 'K':(0.058+0.058)/2, 'M':(0.025+0.024)/2, 'F':(0.047+0.048)/2, 'P':(0.039+0.041)/2, 'S':(0.057+0.059)/2, 'T':(0.051+0.053)/2, 'W':(0.013+0.014)/2, 'Y':(0.032+0.033)/2, 'V':(0.073+0.072)/2}
        for i in range(len(peptide)):
#                peptide[i]=list(peptide[i])
                peptide.append(peptide[i])
                for j in range(len(peptide[i])):
                        print(peptide[2][j])
                        #est_score+=p[peptide[i][j]]
                print ('---')
        print(peptide[2][1])

if __name__=='__main__':

        ff()

Когда я запускаю этот код, в качестве вывода я получаю все значения пептидов, например пептид [i] [j] для stmt печати в цикле, но я хочу, чтобы получить только значения пептида [2] [j]. Также вне цикла работает нормально. print (пептид [2] [1]) дает отличное значение o / p, то есть значение 'A'

мой файл csv выглядит так:

peptide score   allele  
AAAGAEAGKATTEEQ 0.190842    DRB1_0101
AAAGAEAGKATTEEQ 0.006301    DRB1_0301
AAAGAEAGKATTEEQ 0.066851    DRB1_0401
AAAGAEAGKATTEEQ 0.006344    DRB1_0405
AAAGAEAGKATTEEQ 0.035130    DRB1_0701
AAAGAEAGKATTEEQ 0.006288    DRB1_0802
AAAGAEAGKATTEEQ 0.176268    DRB1_0901
AAAGAEAGKATTEEQ 0.042555    DRB1_1101
AAAGAEAGKATTEEQ 0.114855    DRB1_1302
AAAGAEAGKATTEEQ 0.006377    DRB1_1501
AAAGAEAGKATTEEQ 0.006296    DRB3_0101
AAAGAEAGKATTEEQ 0.006313    DRB4_0101
AAAGAEAGKATTEEQ 0.070413    DRB5_0101

Что я хочу сделать, так это оценить оценку каждого пептида, то есть строку, а не все строки вместе, используя: est_score + = p [пептид [i] [j]]


person Kavita Aherwar    schedule 28.06.2016    source источник
comment
пепетид [i] - строка. Для j в диапазоне (len (пептид [i])) перебирает значения j, но затем вы печатаете каждый отдельный символ из пептида [2], не имеющий ничего общего с пептидом [i].   -  person Vince W.    schedule 29.06.2016
comment
Подскажите, пожалуйста, что мне делать, если я хочу посчитать балл для каждой строки отдельно? Он подсчитывает очки для всех строк.   -  person Kavita Aherwar    schedule 29.06.2016
comment
Я не уверен, что понимаю, что вы имеете в виду, говоря о подсчете баллов для каждой строки отдельно. Кажется, что в вашем файле уже есть оценка для каждой строки. Какой расчет? Ваш цикл for для i in range (len (пептид)) перебирает каждую строку как есть. Итак, в стороне этой петли пептид [1] = AAAGA ..., оценка [1] = 0,190842 и аллель [1] = DRB1_0101. Я не знаю, что вы пытаетесь сделать с этими ценностями   -  person Vince W.    schedule 29.06.2016
comment
Я хочу использовать словарь, т. Е. Значения, указанные выше, для прогнозирования / расчета баллов ... Estimated_score - ›est_score. для каждого пептида, то есть строки. Но код добавляет счет для всех пептидов, то есть строк.   -  person Kavita Aherwar    schedule 29.06.2016
comment
ответ был обновлен, чтобы включить в него указанную вами диктовку   -  person Vince W.    schedule 29.06.2016
comment
как и для пептида AARETN оценка будет 0,0755 * 0,0755 * 0,0525 * 0,055 * 0,052 * 0,0445 (A) (A) (R) (E) (T) (N)   -  person Kavita Aherwar    schedule 29.06.2016
comment
если это был ответ, который вы искали, примите его как таковой :-)   -  person Vince W.    schedule 29.06.2016


Ответы (2)


import csv, math

p={'A':(0.074+0.077)/2, 'R':(0.052+0.053)/2, 'N':(0.045+0.044)/2, 'D':(0.054+0.051)/2, 'C':(0.025+0.022)/2, 'Q':(0.034+0.035)/2, 'E':(0.054+0.056)/2, 'G':(0.074+0.074)/2, 'H':(0.026+0.025)/2, 'I':(0.068+0.064)/2, 'L':(0.099+0.096)/2, 'K':(0.058+0.058)/2, 'M':(0.025+0.024)/2, 'F':(0.047+0.048)/2, 'P':(0.039+0.041)/2, 'S':(0.057+0.059)/2, 'T':(0.051+0.053)/2, 'W':(0.013+0.014)/2, 'Y':(0.032+0.033)/2, 'V':(0.073+0.072)/2}

def train_data(fname):
        #load csv training files
        peptide= []
        allele= []
        score = []
        with open (fname) as train:
                reader = csv.DictReader(train, delimiter='\t')
                for row in reader:
                        peptide.append(row['peptide'])
                        allele.append(row['allele'])
                        score.append(row['score'])

        return [peptide, allele, score]

def ff():
        peptide, allele, score = train_data('peptide.txt')
        for i in range(len(peptide)):
                est_score = 0
                for char in peptide[i]:
                    est_score += p[char]
                print("est_score: " + str(est_score), "\t: read_score: " + str(score[i]) )
                print ('---')
        print(peptide[2][1])

if __name__=='__main__':

        ff()

Est_score всегда один и тот же, потому что в предоставленном вами файле пептид идентичен в каждой строке. Это печатает:

est_score: 0.9625000000000001   : read_score: 0.190842
---
est_score: 0.9625000000000001   : read_score: 0.006301
---
est_score: 0.9625000000000001   : read_score: 0.066851
---
est_score: 0.9625000000000001   : read_score: 0.006344
---
est_score: 0.9625000000000001   : read_score: 0.035130
---
est_score: 0.9625000000000001   : read_score: 0.006288
---
est_score: 0.9625000000000001   : read_score: 0.176268
---
est_score: 0.9625000000000001   : read_score: 0.042555
---
est_score: 0.9625000000000001   : read_score: 0.114855
---
est_score: 0.9625000000000001   : read_score: 0.006377
---
est_score: 0.9625000000000001   : read_score: 0.006296
---
est_score: 0.9625000000000001   : read_score: 0.006313
---
est_score: 0.9625000000000001   : read_score: 0.070413
---
A
person Vince W.    schedule 28.06.2016

для меня это только печать peptide[2][j], но она печатается много раз, это то, что вы хотите?

A
A
A
G
A
E
A
G
K
A
T
T
E
E
Q
---
A
A
A
G
A
E
A
G
K
A
T
T
E
E
Q
---
A
A
A
G
A
E
A
G
K
A
T
T
E
E
Q
---
A
A
A
G
A
E
A
G
K
A
T
T
E
E
Q
---
A
A
A
G
A
E
A
G
K
A
T
T
E
E
Q
---
A
A
A
G
A
E
A
G
K
A
T
T
E
E
Q
---
A
A
A
G
A
E
A
G
K
A
T
T
E
E
Q
---
A
A
A
G
A
E
A
G
K
A
T
T
E
E
Q
---
A
A
A
G
A
E
A
G
K
A
T
T
E
E
Q
---
A
A
A
G
A
E
A
G
K
A
T
T
E
E
Q
---
A
A
A
G
A
E
A
G
K
A
T
T
E
E
Q
---
A
A
A
G
A
E
A
G
K
A
T
T
E
E
Q
---
A
A
A
G
A
E
A
G
K
A
T
T
E
E
Q
---
A

как python2, так и python3 дают мне одинаковый результат.

person chantisnake    schedule 28.06.2016
comment
{'T': 0,052, 'K': 0,058, 'G': 0,074, 'Q': 0,0345, 'D': 0,0525, 'E': 0,055, 'M': 0,0245, 'C': 0,0235, ' W ': 0,0135,' I ': 0,066,' L ': 0,0975,' S ': 0,057999999999999996,' P ': 0,04,' F ': 0,0475,' A ': 0,0755,' V ': 0,0725,' N ' : 0,0445, 'R': 0,0525, 'Y': 0,0325, 'H': 0,025500000000000002} Я хочу использовать словарь, т. Е. Значения, указанные выше, для прогнозирования / расчета баллов ... Estimated_score - ›est_score. для каждого пептида, то есть строки. Но код добавляет счет для всех пептидов, то есть строк. - person Kavita Aherwar; 29.06.2016