[Python] funkcja znajdująca kolejny wyraz

ct985
Użytkownik
Użytkownik
Posty: 184
Rejestracja: 13 paź 2011, o 20:36
Płeć: Kobieta
Lokalizacja: Warszawa
Podziękował: 71 razy

[Python] funkcja znajdująca kolejny wyraz

Post autor: ct985 »

Mam problem z napisaniem funkcji znajdującej następny wyraz w porządku leksykograficznym. Wyrazy składają się z czterech dowolnych liter spośród A,C,G,T, mogą się powtarzać. Funkcja ma zwrócić np. dla 'AAAA' - 'AAAC'. Mój pomysł:

Kod: Zaznacz cały

def nastepny_w_tab(kmer):
	p=['A','C','G','T']
	if kmer[len(kmer)-1]!='T': #rozny od 'T'
		for i in range(3):
			if p[i]==kmer[-1]:
				kmer[-1]=p[i+1]
	else: # kmer[-1]=='T'
		kmer=kmer[:len(kmer)-1]
		kmer=nastepny_w_tab(kmer)
		kmer.append('A')
	return kmer
			
def nastepny_kmer(string):
	lista=list(string)
	zmienna=nastepny_w_tab(lista)
	return ''.join(zmienna)
pfauel
Użytkownik
Użytkownik
Posty: 32
Rejestracja: 26 lis 2009, o 01:15
Płeć: Mężczyzna
Lokalizacja: Polska
Pomógł: 9 razy

[Python] funkcja znajdująca kolejny wyraz

Post autor: pfauel »

Kod: Zaznacz cały

def next_string(string):
	if string == "TTTT":
		return string
	string_as_list = list(string)
	p = ['A','C','G','T']
	for i, char in reversed(list(enumerate(string_as_list))):	
		string_as_list[i] = p[(p.index(char) + 1) % len(p)]
		if char != p[-1]:
			return ''.join(string_as_list)
To powinno działać. Mam nadzieję, że pomogłem.
pozdrawiam
ODPOWIEDZ