我有一系列字符,我想将它们转换为指定的章程。
Seq = "AA" #This the sequence of characters
def complement (Seq):
for nuc in Seq: # converting the sequence of characters into the desirable character
if nuc == 'A':
comp = 'T'
return comp
print "The complement of the Sequence AA is", complement(Seq)
当我尝试运行上面的代码时,代码无法识别整个字符序列并将它们一次转换为" T" s;但是,它只是执行" T"一次输入序列" AA"
任何想法如何使代码转换每个" A"序列中的字符进入" T"?
感谢您的帮助!
答案 0 :(得分:2)
您的脚本有一些错误。首先,变量comp没有初始值并且只返回一个“T”(最后一个),因为另一个在循环中找到“A”时被替换。根据我的理解,您试图在同一个字符串中替换某些值。我发现用你想要替换的字符构建一个新字符串会更容易。
这是我的剧本:
super(SignUpForm, self).__init__(*args, **kwargs)
答案 1 :(得分:2)
首先,使用string.maketrans
构建转换表。该函数接受两个字符串,并构建一个表,将第一个字符串的每个字符映射到第二个字符串中的相应字符。现在,您可以将该表传递给要翻译的字符串的translate
方法。
>>> import string
>>> table = string.maketrans("ATCG", "TAGC")
>>> 'AAAGTC'.translate(table)
'TTTCAG'
答案 2 :(得分:1)
这是因为在你刚刚将'T'
放在comp
上并且最后将其返回的条件之后:
if nuc == 'A':
comp = 'T'
return comp
但作为一种更加pythonic的方式,您可以使用str.replace()
:
>>> Seq = "AA"
>>> Seq.replace('A','T')
'TT'
如果你想根据条件将每个角色转换为特殊角色,你可以使用列表理解和join
:
>>> Seq = "AA"
>>> ''.join(['T' for i in Seq if i=='A'])
'TT'
同样基于你的任务,你可以有另一个选择,比如使用正则表达式。在这种情况下,python附带re.sub()
函数来替换基于正则表达式的字符串。
答案 3 :(得分:1)
当然,它只会是public interface RecordingService {
ScheduledRecordsXML getScheduledRecords(long userId)
throws ServerErrorException;
}
public class RecordingServiceImpl
implements RecordingService {
private static final String TAG = RecordingServiceImpl.class.getSimpleName();
private RetrofitRecordingService retrofitRecordingService;
public RecordingServiceImpl(RetrofitRecordingService retrofitRecordingService) {
this.retrofitRecordingService = retrofitRecordingService;
}
@Override
public ScheduledRecordsXML getScheduledRecords(long userId)
throws ServerErrorException {
try {
return retrofitRecordingService.getScheduledPrograms(String.valueOf(userId));
} catch(RetrofitError retrofitError) {
Log.e(TAG, "Error occurred in downloading XML file.", retrofitError);
throw new ServerErrorException(retrofitError);
}
}
}
@Module
public class NetworkClientModule {
@Provides
@Singleton
public OkHttpClient okHttpClient() {
OkHttpClient okHttpClient = new OkHttpClient();
okHttpClient.interceptors().add(new HeaderInterceptor());
return okHttpClient;
}
}
@Module(includes = {NetworkClientModule.class})
public class ServiceModule {
@Provides
@Singleton
public RecordingService recordingService(OkHttpClient okHttpClient, Persister persister, AppConfig appConfig) {
return new RecordingServiceImpl(
new RestAdapter.Builder().setEndpoint(appConfig.getServerEndpoint())
.setConverter(new SimpleXMLConverter(persister))
.setClient(new OkClient(okHttpClient))
.setLogLevel(RestAdapter.LogLevel.NONE)
.build()
.create(RetrofitRecordingService.class));
}
//...
}
public interface RetrofitRecordingService {
@GET("/getScheduledPrograms")
ScheduledRecordsXML getScheduledPrograms(@Query("UserID") String userId);
}
public interface ServiceComponent {
RecordingService RecordingService();
//...
}
public interface AppDomainComponent
extends InteractorComponent, ServiceComponent, ManagerComponent, ParserComponent {
}
@Singleton
@Component(modules = {
//...
InteractorModule.class,
ManagerModule.class,
ServiceModule.class,
ParserModule.class
//...
})
public interface ApplicationComponent
extends AppContextComponent, AppDataComponent, AppDomainComponent, AppUtilsComponent, AppPresentationComponent {
void inject(DashboardActivity dashboardActivity);
//...
}
。因为您的循环只是将T
附加到T
而不是连接。
试试这个:
comp
Here是字符串连接和格式化的基础教程。
答案 4 :(得分:0)
如果,你想得到DNA序列的补体
complement = {"A":"T", "C":"G", "G":"C", "T":"A"}
seq = "ACGT"
complement_seq = "".join([complement[b] for b in seq])
complement_seq
这类似于,
complement = {"A":"T", "C":"G", "G":"C", "T":"A"}
seq = "ACGT"
complement_seq = ""
for base in seq:
complement_seq += complement[base]
complement_seq
你得到了
TGCA
更好,使用biopython库
from Bio.Seq import Seq
my_seq = Seq("ACGT")
my_seq.complement()
你得到了
Seq('TGCA', Alphabet())