如何使用Python转换字符串中的每个字符

时间:2015-08-28 22:07:36

标签: python string for-loop

我有一系列字符,我想将它们转换为指定的章程。

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"?

感谢您的帮助!

5 个答案:

答案 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())