生成器表达式的格式不正确? python

Incorrect format of generator expression? python

我正在尝试将几个 ifelse 语句更改为生成器表达式,但由于某种原因它给了我一个错误。

所以我的 ifelse 声明是这样的..

sequence = 'CTGAGTAGC'
reference = 'ATGACTGCC'

for seq, ref in zip(sequence,reference):
    if seq == ref:
        print seq,'-',ref
    else:
        print seq,' ',ref

我已经尝试将上面的 if 和 else 语句放入此生成器表达式中..

tmp = (seq,'-',ref if seq==ref else seq,' ',ref for seq,ref in zip(sequence,reference))
print tmp

它给我这样的错误:

tmp = (seq,'-',ref if seq==ref else seq,' ',ref for seq,ref in zip(sequence,reference))
                                                  ^
SyntaxError: invalid syntax

您需要消除表达式中元组的歧义:

tmp = ((seq, '-', ref) if seq == ref else (seq, ' ', ref)
       for seq, ref in zip(sequence, reference))

甚至

tmp = ((seq, '-' if seq == ref else ' ', ref)
       for seq, ref in zip(sequence, reference))

演示:

>>> sequence = 'CTGAGTAGC'
>>> reference = 'ATGACTGCC'
>>> tmp = ((seq, '-' if seq == ref else ' ', ref)
...        for seq, ref in zip(sequence, reference))
>>> for tup in tmp:
...     print tup
... 
('C', ' ', 'A')
('T', '-', 'T')
('G', '-', 'G')
('A', '-', 'A')
('G', ' ', 'C')
('T', '-', 'T')
('A', ' ', 'G')
('G', ' ', 'C')
('C', '-', 'C')
print seq,'-',ref

在这种类型的语句中,print 正在为您将字符串放在一起。 seq, '-', ref 其他任何地方都是元组,如果你不想要元组....

tmp = ( "-".join(i) if i[0] == i[1] else " ".join(i) for i in zip(sequence,reference))

for i in tmp:
    print i

"-".join(i) if i[0] == i[1] else " ".join(i) 是一个 python 三元表达式(其形式为 A if condition else B