Python三元条件用于连接字符串

时间:2014-05-10 07:14:17

标签: python augmented-assignment

Martijn Pieters回答。谢谢。
这是因为声明与表达。 并且因为.join()不变异(是纯函数),所以需要将它赋值给变量。

问题:
这种奇怪的原因是什么?

目标:

if base == 'T':
    RNA_seq += 'U'
else:
    RNA_seq += base

以下方法有效:

# += in expression1 and .join() in expression2
RNA_seq += 'U' if base == 'T' else RNA_seq.join(base)
# Edit note: RNA_seq.join(base) works because it returns `base`
#       aka. RNA_seq += 'U' if base == 'T' else base

但以下情况不起作用:

# Using += on both expressions
RNA_seq += 'U' if base == 'T' else RNA_seq += base

# Using .join() for both expressions
RNA_seq.join('U') if base == 'T' else RNA_seq.join(base)

Python2和Python3中的结果相同。

2 个答案:

答案 0 :(得分:5)

与所有作业一样,+=声明。你不能把语句放在表达式中。右手表达式(+=之后的所有内容)将首先评估 ,其结果随后将用于扩充分配。

可以做:

RNA_seq += 'U' if base == 'T' else base

现在,表达式会解析为'U'base,具体取决于base的值。

如果'U' if base == 'T' else RNA_seq.join(base)有效,那么这意味着RNA_seq.join()会返回一个新值,并且不会就地RNA_seq进行变更。然后,RNA_seq.join('U') if base == 'T' else RNA_seq.join(base)也会返回一个新值,保留原始值RNA_seq不变,并且您没有将其分配回RNA_seq

答案 1 :(得分:0)

这是一个简单的单行程序,从DNA到RNA(T-> U)进行相同的转录:

RNA = lambda x:''.join([{'A':'A','C':'C','G':'G','T':'U'}[B] for B in x])
print RNA("AGTCAGCAT") #example sequence results in AGUCAGCAU