2015-03-19 1 views
0

Я хотел бы написать функцию с именем «частота», которая может фиксировать частоту пар во второй половине моего вывода, например, если я фиксирую частоту пары [ «а», «C»] на 0,5 и частота пара [ «M», «к»] в 0,5, Я хотел бы выход, как следующее:python 3, как исправить частоту возникновения

['A', 'K'] 
    ['A', 'K'] 
    ['A', 'K'] 
    ['A', 'K'] 
    ['A', 'K'] 
    ['A', 'C'] 
    ['A', 'C'] 
    ['A', 'C'] 
    ['M', 'K'] 
    ['M', 'K'] 
    ['M', 'K'] 

Я хотел бы легко изменить значение частоты I. Я попытался создать функцию для этой цели, но я просто мог подсчитать частоту существующих пар, не исправляя их.

код у меня есть следующие:

for i in range(int(lengthPairs/2)): 
    pairs.append([aminoacids[0], aminoacids[11]]) 
print(int(lengthPairs/2)) 

for j in range(int(lengthPairs/2)+1): 
    dictionary = dict() 
    r1 = randrange(20) 
    r2 = randrange(20) 
    pairs.append([aminoacids[r1], aminoacids[r2]]) 

for pair in pairs: 
    print (pair) 

где:

aminoacids = ['A', 'R', 'N', 'D', 'C', 'Q', 'E', 'G', 'H', 'I', 'L', 'K', 'M', 'F', 'P', 'S', 'T', 'W', 'Y', 'V'] 
lengthPairs = 10 
pairs = list(list()) 

это дает мне такой вывод:

['A', 'K'] 
['A', 'K'] 
['A', 'K'] 
['A', 'K'] 
['A', 'K'] 
['A', 'C'] 
['M', 'K'] 
['I', 'I'] 
['F', 'G'] 
['V', 'H'] 
['V', 'I'] 

большое спасибо за любую помощь !

+0

Почему бы не сбросить число каждого из них, а затем перетасовать их, чтобы смешать их? –

+0

Вам нужно описать, что вы имеете в виду лучше, чем «установить частоту a 0,5». Что означает «0,5»? 0,5? – Broseph

ответ

0

Я старался изо всех сил понять, что вы имели в виду. И давайте посмотрим, что делает то, что вы хотите:

aminoacids = ['A', 'R', 'N', 'D', 'C', 'Q', 'E', 'G', 'H', 'I', 'L', 'K', 'M', 'F', 'P', 'S', 'T', 'W', 'Y', 'V'] 

pair_fq_change = [aminoacids[0], aminoacids[11]] #the pair that you'd like to change the frequency, e.g. ['A', 'K'] 

original_pairs = [['D', 'E'], ['S', 'F'], ['A', 'K'], ['A', 'K'], ['A', 'K'], ['A', 'K'], ['A', 'K'], ['B', 'C']] 


def frequency(original_pairs, pair_fq_change, fq): 
'''fq is the number of frequency that you want the pair_fq_change to have''' 
    updated_pairs = [] 
    count = 0 
    for pair in original_pairs: 
     if pair != pair_fq_change: 
      updated_pairs.append(pair) 
     elif pair == pair_fq_change and count < fq: 
      updated_pairs.append(pair) 
      count += 1 
     else: 
      continue 
    return updated_pairs   

updated_pairs = frequency(original_pairs, pair_fq_change, 3) 
print(updated_pairs) 

>>>[['D', 'E'], ['S', 'F'], ['A', 'K'], ['A', 'K'], ['A', 'K'], ['B', 'C']] 
+0

большое спасибо за ваш ответ! Да, я искал что-то подобное. Это не совсем то, что я должен сделать, но теперь я могу легко изменить вашу функцию. большое спасибо! Мне не всегда легко объяснить, что я хочу делать ... ты действительно сделал свой день! Еще раз спасибо – rory

+0

@laura Добро пожаловать. И я был бы признателен, если бы вы проголосовали за мой ответ, нажав стрелку вверх. – DanEng

+0

Я не могу этого сделать, потому что мне нужна большая репутация, извините! – rory