0

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 的结果相同。

4

2 回答 2

6

像所有的赋值一样,+=是一个语句。您永远不能将语句放在表达式中。首先计算右侧表达式(之后的所有内容+=),然后将其结果用于扩充赋值。

可以这样做:

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.

于 2014-05-10T07:15:45.273 回答
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
于 2016-01-15T01:54:33.070 回答