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

生成器表达式的格式不正确?python,python,printing,generator,generator-expression,Python,Printing,Generator,Generator Expression,我试图将几个if和else语句更改为生成器表达式,但由于某种原因,它给了我一个错误 因此,我的if和else声明如下 sequence = 'CTGAGTAGC' reference = 'ATGACTGCC' for seq, ref in zip(sequence,reference): if seq == ref: print seq,'-',ref else: print seq,' ',ref 我已经尝试将上面的if和else语句转换

我试图将几个if和else语句更改为生成器表达式,但由于某种原因,它给了我一个错误

因此,我的if和else声明如下

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))
演示:

在这种类型的语句中,print为您将字符串组合在一起。seq,“-”,ref anywhere将是一个元组,如果您不想要元组

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

for i in tmp:
    print i

-.joini if i[0]==i[1]else.joini是一个python三元表达式,其形式为a if条件else B

Hmm,我认为它应该是seq,'-',ref if seq==ref else seq',ref for…,no?@DanielRoseman:好了,说明为什么这里需要消除歧义:-@Pieters上面的if and else语句实际上打印出了字符串,但您发布的解决方案给了我这个..@Danny:您要求的是生成器表达式,这就是生成器表达式打印时的样子。您需要在生成器上迭代以访问它生成的结果。@Pieters哦,所以我想我必须使用另一个for循环。。。。这难道不会让整个代码变得^2复杂吗?对不起,我是python新手,你想要seq、delimiter、ref的元组还是seq+delimiter+ref的字符串?@NightShade,我想要seq+delimiter+refhm的字符串我不明白为什么我被否决了。。。我的问题格式错了还是怎么了?
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